r - 比较几列的顺序并确定它们与引用点之间的差异

标签 r dataframe

我想比较一组列并确定列与引用之间的/或几个差异。我的数据看起来像这个玩具数据:

df <- data.frame(id = c(1:5),
                 var1 = c("A","A","A","A","B"),
                 var2 = c(10,20,10,10,10),
                 var3 = c("A2", "A2", "A3", "A2", "A2"),
                 var4 = c("B2", "B2", "B2", "B3", "B2"),
                 var5 = c("C2", "C2", "C2", "C2", "C4"))

这给出了以下数据框:

  id var1 var2 var3 var4 var5
1  1    A   10   A2   B2   C2
2  2    A   20   A2   B2   C2
3  3    A   10   A3   B2   C2
4  4    A   10   A2   B3   C2
5  5    B   10   A2   B2   C4

我还有以下内容 我想比较 V1V2V3V4V5 的序列> 使用引用序列(在向量 ref 中找到,见下文)并且 (1) 使用序列中不同的部分(列或向量元素)创建一个新列 (2) 创建一个新列指示在哪一列中识别出差异的列。

# Same as the first row of df
ref <- c("A", 10, "A2", "B2", "C2")

预期输出应该是:

  id diff which
1  1 <NA>  <NA>
2  2   20  var2
3  3   A3  var3
4  4   B3  var4
5  5   C4  var5

因此,通过此输出,我可以看到对于 id == 2 的观察,引用点和行序列之间的差异在 var2 中找到是20

有人知道怎么做吗?

最佳答案

以 R 为基数:

l <- apply(df[-1], 1, function(x) x[x != ref])
data.frame(id = 1:nrow(df),
           diff = sapply(l, toString),
           which = sapply(l, function(x) toString(names(x))))

  id  diff      which
1  1                 
2  2    20       var2
3  3    A3       var3
4  4    B3       var4
5  5 B, C4 var1, var5

关于r - 比较几列的顺序并确定它们与引用点之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73557295/

相关文章:

r - 如何在 tufte 讲义中将引文放在文档末尾?

python - 为 PySpark dataFrame 中的特定单元格赋值

r - 匹配数据并统计相同值的个数

python - 使用 apply 将从一列(具有 json 类型)提取的值插入到另一列

r - 过滤具有至少一个特定值的行

r - 使用过滤器在不同变量的数据框中重叠

r - ggplot2:从x轴日期中删除周末和节假日的空白区域

r - 在 R 中绘制按年折叠的唯一值

python - Pandas 提取多列

r - R 中的 iferror 等价物