私は列名のベクトルを2つ持っています。各ベクトルは同じ長さであり、単一の数字を除いて同じ名前です。if文を使って効率的に行と列をループする
columns <- paste0("q1h10_",1:9) # Filter columns
columns2 <- paste0("q1h4_", 1:9) # Columns where number is at
Iはベクトル一列のデータフレームの列を通って貫通ループ5があるときはいつでも、第二のベクターにおいて同等の列を見つけて、それに番号を持ってたいです。私はあなたが下のコードで見ることができる番号を持って来る他の条件があります。
value <- vector("numeric", nrow(psid))
for (i in 1:nrow(psid)) {
for (x in 1:length(columns)) {
if (5 %in% psid[i, columns[x]] & all(as.numeric(psid[i, columns2[x]]) != 97:99)) {
value[i] <- substr(columns[x], 7, 8)
} else if (5 %in% psid[i, columns[x]] & psid[i, columns2[x]] %in% 97:99 & x != 1) {
value[i] <- substr(columns[x - 1], 7, 8)
} else if (5 %in% psid[i, columns[x]] & psid[i, columns2[x]] %in% 97:99 & x == 1) {
value[i] <- 0
}
}
}
value
[1] "1" "2" "2" "3" "4" "0" "0" "0" "1" "0" "3" "1" "3" "2" "3" "0" "1" "3" "1" "1" "2"
[22] "2" "2" "1" "2" "3" "1" "1" "0" "1"
希望の結果を得ることができましたが、これを達成するのが遅い方法です。私は適用家族にこれを「耕作」しようとしましたが、私は完全に専門家ではなく、正しく処理することはできません。誰かが、より速い、おそらくより読みやすい解決策を持っているなら、どんな助けも高く評価されるでしょう。
データ:
psid <- structure(list(q1h10_1 = c(5L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 5L,
0L, 1L, 5L, 1L, 1L, 1L, 0L, 5L, 1L, 5L, 5L, 1L, 1L, 1L, 5L, 1L,
1L, 5L, 1L, 0L, 5L), q1h10_2 = c(0L, 5L, 5L, 1L, 1L, 0L, 0L,
0L, 0L, 0L, 1L, 0L, 1L, 5L, 1L, 0L, 0L, 1L, 0L, 0L, 5L, 5L, 5L,
0L, 5L, 1L, 0L, 5L, 0L, 0L), q1h10_3 = c(0L, 0L, 0L, 5L, 1L,
0L, 0L, 0L, 0L, 0L, 5L, 0L, 5L, 0L, 5L, 0L, 0L, 5L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 5L, 0L, 0L, 0L, 0L), q1h10_4 = c(0L, 0L, 0L,
0L, 5L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), q1h10_5 = c(0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), q1h10_6 = c(0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), q1h10_7 = c(0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), q1h10_8 = c(0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), q1h10_9 = c(0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), q1h4_1 = c(1,
2, 6, 4, 4, 0, 0, 0, 4, 0, 3, 4, 4, 4, 1, 0, 4, 4, 3, 1, 4, 6,
4, 4, 4, 4, 4, 3, 0, 6), q1h4_2 = c(0, 3, 4, 3, 3, 0, 0, 0, 0,
0, 2, 0, 6, 4, 6, 0, 0, 4, 0, 0, 6, 4, 4, 0, 6, 6, 0, 97, 0,
0), q1h4_3 = c(0, 0, 0, 6, 2, 0, 0, 0, 0, 0, 6, 0, 6, 0, 6, 0,
0, 6, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0), q1h4_4 = c(0, 0, 0,
0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0), q1h4_5 = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), q1h4_6 = c(0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0), q1h4_7 = c(0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
), q1h4_8 = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), q1h4_9 = c(0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0)), class = "data.frame", .Names = c("q1h10_1",
"q1h10_2", "q1h10_3", "q1h10_4", "q1h10_5", "q1h10_6", "q1h10_7",
"q1h10_8", "q1h10_9", "q1h4_1", "q1h4_2", "q1h4_3", "q1h4_4",
"q1h4_5", "q1h4_6", "q1h4_7", "q1h4_8", "q1h4_9"), row.names = c(NA,
-30L))
あなたが期待される成果を投稿することができますか? – Sotos