使用另一个data.frame中的列表减去data.frame中的列表

时间:2016-07-26 00:08:58

标签: r list dataframe

我有两个显示月份的数据框和每行中的ID列表。它们看起来像这样:

数据框A:

Month   ID
2016-03 1,2,3
2016-04 4,5,6
2016-05 7,8,9

数据框B:

Month   ID
2016-03 2,3,4 
2016-04 5,6,7
2016-05 8,9,10

看起来很简单,也许我正在过度思考它,但是我无法从数据帧A中减去数据帧B中的相应行。

最终目标是在删除数据帧B后从数据帧A获取每行ID数。

结果数据框如下所示:

Month   ID
2016-03 1 
2016-04 4
2016-05 7

我的计数是1, 1, 1

提前感谢您的帮助!

更新

“ID”列中的值是列表对象,如:

c("1", "2", "3")

1 个答案:

答案 0 :(得分:2)

每个setdiff都有适当的向量后使用Month

result <- Map(setdiff, A$ID, B$ID[match(A$Month,B$Month)] ))
#[[1]]
#[1] 1
#
#[[2]]
#[1] 4
#
#[[3]]
#[1] 7

如果您需要长度,您可以轻松完成:

lengths(result)
#[1] 1 1 1

其中,使用的数据是:

A <- structure(list(Month = c("2016-03", "2016-04", "2016-05"), ID = list(
    c(1, 2, 3), c(4, 5, 6), c(7, 8, 9))), .Names = c("Month", 
"ID"), row.names = c(NA, -3L), class = "data.frame")
B <- structure(list(Month = c("2016-03", "2016-04", "2016-05"), ID = list(
    c(2, 3, 4), c(5, 6, 7), c(8, 9, 10))), .Names = c("Month", 
"ID"), row.names = c(NA, -3L), class = "data.frame")