根据另一个数据帧的值删除数据帧的行和列

时间:2013-09-06 22:08:32

标签: r list loops dataframe

我想打印大数据框的行和列,其中值也出现在另一个数据框的给定行或列中。我正在尝试基于与值列表重合的for循环,但没有成功。一个简化的例子:

给定数据框

r1<-c(1,2,3,4,5)
r2<-c(6,7,8,9,10)
r3<-c(11,12,13,14,15)
r4<-c(16,17,18,19,20)
r5<-c(21,22,23,24,25)
sample<-as.data.frame(rbind(r1,r2,r3,r4,r5))

        V1  V2  V3  V4  V5
   r1   1   2   3   4   5
   r2   6   7   8   9   10
   r3   11  12  13  14  15
   r4   16  17  18  19  20
   r5   21  22  23  24  25

我想要删除“sample”的列,其中第一行r1的值没有出现在

info.column<-as.data.frame(c(6,1,4,21,15,11,9,12,13,14,15))

并删除第一列V1的值未出现在

中的行
info.row<-as.data.frame(c(1,11,3,7,5,21,2))

预期结果将是

            V1  V4
       r1   1   4
       r3   11  14
       r5   21  24

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

sample[sample$V1 %in% info.row[, 1], sample[1,] %in% info.column[, 1]]

让我们打破这一点。看看每个部分返回的内容:

> sample$V1 %in% info.row[, 1]
[1]  TRUE FALSE  TRUE FALSE  TRUE

这表示在data.frame sample的第一列中找到了名为V1的{​​{1}}列的哪些行。或者用文字,我在第1,3和5行找到匹配的值。

类似地:

info.row

我想要> sample[1,] %in% info.column[, 1] [1] TRUE FALSE FALSE TRUE FALSE 的列,其中data.frame sample的第一列位于第一行。再说一遍,我发现在第1列和第4列中匹配的值。

因此结果将是3 x 2并相当于info.column

使用sample[c(1, 3, 5), c(1, 4)]时,您可以将其视为[。因此,返回[rows,columns]这两个表达式为subset

的位置