2 つの文字ベクトル "A" と "B" の項目を一致させたいのですが、2 つのことを調べます: 1) ベクトル A の項目がベクトル B に表示されるかどうか (はい/いいえ) と 2) ベクトル B のどの項目が表示されないかベクトル A に現れる?
2 つのベクトルは次のようになります。
A <- c("i", "u", "I", "U", "E", "V", "@", "{", "$", "#", "Q", "1", "2", "3", "4", "5", "6", "7", "8", "9")
B <- c("1", "1", "1", "1", "#", "$", "$", "1", "2", "2", "1", "d", "d", "i", "i", "i", "i", "1", "3", "2", "2", "F", "2", "2", "2", "5", "5", "5", "@", "5", "6", "5", "z", "z", "S", "S")
この関数を使用して、最初の質問に部分的に答えることができます。
test_match <- function(item_vector_A, item_vector_B){
ifelse(item_vector_A == item_vector_B, print(1), print(0))
}
lapply(A, B, FUN = test_match) -> results
ただし、これを試すと、関数が行った各比較のリストが表示されます。
lapply(A, B, FUN = test_match) -> results
results
[[1]]
[1] 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[[2]]
[1] 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 0 0 0 0 0 0
[[3]]
[1] 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 0 0 0 0 0 0
#etc.
次のように、A の各項目が B で発生するか (1) 発生しないか (0) を示す単純なリストを取得するにはどうすればよいですか。
1 0 0 0 0 0 1 0 1 1 0 1 1 1 0 1 1 0 0 0
2 番目の質問に答えようとすると、同じ問題が発生します。
test_non_match <- function(item_vector_A, item_vector_B){
ifelse(item_vector_B == item_vector_A, print("*match*"), print(item_vector_B))
}
lapply(A, B, FUN = test_non_match) -> results2
results2
[[1]]
[1] "1" "1" "1" "1" "#" "$" "$" "1" "2" "2" "1" "d" "d" "*match*" "*match*" "*match*" "*match*" "1" "3" "2" "2" "F" "2" "2" "2" "5" "5" "5" "@" "5" "6" "5" "z" "z" "S" "S"
[[2]]
[1] "1" "1" "1" "1" "#" "$" "$" "1" "2" "2" "1" "d" "d" "i" "i" "i" "i" "1" "3" "2" "2" "F" "2" "2" "2" "5" "5" "5" "@" "5" "6" "5" "z" "z" "S" "S"
[[3]]
[1] "1" "1" "1" "1" "#" "$" "$" "1" "2" "2" "1" "d" "d" "i" "i" "i" "i" "1" "3" "2" "2" "F" "2" "2" "2" "5" "5" "5" "@" "5" "6" "5" "z" "z" "S" "S"
ベクトル全体がリストされていますが、次のようなものが必要です。
[1] *match*
[1] *match*
[1] *match*
[1] *match*
[1] *match*
[1] *match*
[1] *match*
[1] *match*
[1] *match*
[1] *match*
[1] *match*
[1] d
[1] d
[1] *match*
[1] *match*
[1] *match*
[1] *match*
[1] *match*
[1] *match*
[1] *match*
[1] *match*
[1] F
[1] *match*
[1] *match*
[1] *match*
[1] *match*
[1] *match*
[1] *match*
[1] z
[1] z
[1] S
[1] S
別のタイプの apply() 関数を使用する必要がありますか?