我想比较一组列并确定列与引用之间的/或几个差异。我的数据看起来像这个玩具数据:
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
我还有以下内容
我想比较 V1
、V2
、V3
、V4
和 V5
的序列> 使用引用序列(在向量 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/