我有一个称为ref的参考数据帧。我想将ref中的元素与一组数据帧进行比较,然后将不匹配项插入列表中。值为0、1和NA。下面的样本数据集: 参考: df1 数据帧未排序。引用ID均包含在内。目的是比较具有相同ID和colname的元素,并根据colname列出不匹配项。 df1的所需列表为: df1_list 主要问题是列名不是全部相同,也不是按顺序排列。如果我要对许多数据帧中的每一个执行此操作,则将变得相当复杂。我也无法通过连接函数解决这个问题。 答案 0 :(得分:1) 这是使用基数R的一种方法:ref <- structure(list(ID = structure(c(2L, 1L, 3L), .Label = c("bar",
"foo", "hello"), class = "factor"), a = c(1, 0, 0), b = c(1,
1, 0), c = c(1, 1, 1)), class = "data.frame", row.names = c(NA,
-3L))
df1 <- structure(list(ID = structure(2:1, .Label = c("bar", "foo"), class = "factor"),
b = c(0, 0), f = c(NA, 0), a = c(1, 1)), class = "data.frame", row.names = c(NA,
-2L))
ID a b c
1 foo 1 1 1
2 bar 0 1 1
3 hello 0 0 1
ID b f a
1 foo 0 NA 1
2 bar 0 0 1
$a
[1] "bar"
$b
[1] "foo" "bar"
1 个答案:
cols <- intersect(names(df1[-1]), names(ref[-1]))
rows <- match(df1$ID, ref$ID)
apply(df1[cols] != ref[rows, cols], 2, function(x) as.character(df1$ID[x]))
#$b
#[1] "foo" "bar"
#$a
#[1] "bar"