我有一个唯一ID列(VariableA),我想与多个列进行比较(VariableB,VariableC ...)。
每列都有唯一的ID,但ID可能包含两列或更多列,如下所示:
VariableA VariableB VariableC
0001 0001 0008
0002 0003 0001
0004 0004 0002
0005 0006
0007 NA
我正在使用ainb <- variablea[,1] %in% variableb[,1]
检查VariableA中是否存在VariableA中的值,但是我无法搜索如何获取存在于多个列中的VariableA中的值计数(VariableB) ,VariableC等)。
使用ainall <- variablea[,1] %in% dat[,2:6]
只是给了我所有的错误。我认为问题可能是列的长度都不同。我不是试图按行匹配,只是每个单独的值。
希望足够清楚!任何帮助赞赏。
答案 0 :(得分:2)
这是一个简单的例子。首先,让我们创建一个示例数据框:
data_example <- data.frame(var_a = 1:10, var_b = c(1:5,11:15), var_c=c(1:7, NA, NA, NA))
> data_example
var_a var_b var_c
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
5 5 5 5
6 6 11 6
7 7 12 7
8 8 13 NA
9 9 14 NA
10 10 15 NA
因此,您可以看到var_a
与var_b
重叠50%,var_c
与70%重叠(var_c
有一些NAs。
让我们看看每列的哪些唯一值重叠:
overlap_vals = apply(data_example, 2, intersect, data_example$var_a)
> overlap_vals
$var_a
[1] 1 2 3 4 5 6 7 8 9 10
$var_b
[1] 1 2 3 4 5
$var_c
[1] 1 2 3 4 5 6 7
现在我们想知道var_a
中有多少元素出现在这些重叠向量中。首先创建一个小辅助函数,获取列表中一个向量的比例重叠:
propn_overlap <- function(comparison_vector, id_vector){
sum(id_vector %in% comparison_vector) / length(id_vector)
}
现在我们可以使用sapply在列表中的所有向量上应用我们的辅助函数:
> sapply(overlap_vals, propn_overlap, data_example$var_a)
var_a var_b var_c
1.0 0.5 0.7