【问题标题】:compare values of one column with values of multiple other columns将一列的值与其他多列的值进行比较
【发布时间】:2015-09-17 11:18:36
【问题描述】:

我有一列 (VariableA) 的唯一 ID,我想与多列 (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 中的值是否存在于VariableB 中,这有效,但我无法搜索找出如何计算VariableA 中存在于多个列中的值(VariableB、VariableC , ETC)。

使用ainall <- variablea[,1] %in% dat[,2:6] 只是给了我所有错误。我相信问题可能是列的长度都不同。我不想按行匹配,只是每个单独的值。

希望这已经足够清楚了!任何帮助表示赞赏。

【问题讨论】:

  • 尝试获取其他列的表计数并按第一列进行子集化,例如table(unlist(df[-1]))[df$VariableA]。数据框的名称是什么?因为这个表达式不应该工作variablea[,1]。其一,它不是您的列的名称,二,列本身没有二维。
  • variablea 是只有一列的 data.frame 的名称(变量 a 的所有 ID)。 dat 是一个 data.frame,其中包含我的所有列。

标签: r


【解决方案1】:

这是一个简单的例子。首先,让我们创建一个示例数据框:

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_avar_b 重叠了 50%,var_c 重叠了 70%(并且var_c 有一些 NA)。

让我们看看每一列都有哪些唯一值重叠:

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 

【讨论】:

  • 你是我的英雄!非常感谢您的详细解释,我肯定会将这些功能保留在内存中。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2018-09-12
  • 2022-08-05
  • 1970-01-01
  • 2021-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多