使用%in%后,如何引用多个数据帧和列?

时间:2017-04-27 22:31:30

标签: r subset data-cleaning

我有3个数据帧。我需要删除所有三个数据帧中都没有rownames的行。而不是采用转置,合并,拆分和重新标记行,我一直在使用它来处理两个数据帧:

df1 = df1[rownames(df1) %in% rownames(df2), ]
df2 = df2[rownames(df2) %in% rownames(df1), ]

这样做会使df1删除所有未出现在第二个数据集中的行,反之亦然。

但是如何为3个或4个数据集执行此操作?我需要这样的东西:

df1 = df1[rownames(df1) %in% c(rownames(df2), rownames(df3)), ]

但这似乎使它删除了BOTH df2和df3不存在的行,而我需要删除df2中不存在的行以及df3中不存在的任何行。

例如:if:

df1有三行,rownames为x1,x2和x3

df2有行x2,x3,x4

df3有行x3,x4,x5

这三个共同的唯一行是x3,所以我希望从三个数据帧中删除所有其他行。

1 个答案:

答案 0 :(得分:0)

也许您要找的只是&

df1 <- data.frame(a = c(1,2,3), row.names = c("x1","x2","x3"))
df2 <- data.frame(b = c(2,3,4), row.names = c("x2","x3","x4"))
df3 <- data.frame(c = c(3,4,5), row.names = c("x3","x4","x5"))

df1[rownames(df1) %in% rownames(df2) & rownames(df1) %in% rownames(df3),
    , drop = F] # the drop = F is here only so you see the dimnames
   a
x3 3