0

我想打印一个大数据框的行和列,其中值也出现在另一个数据框的给定行或列中。我正在尝试基于与值列表重合的 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

我想删除第一行 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

有什么建议吗?

4

1 回答 1

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 的第一列中找到了samplenamed列的哪些行。或者换句话说,我在第 1、3 和 5 行找到匹配值。V1info.row

相似地:

> sample[1,] %in% info.column[, 1]
[1]  TRUE FALSE FALSE  TRUE FALSE

说我想要在第一行中找到sampledata.frame 第一列的info.column列。再说一遍,我在第 1 列和第 4 列中找到匹配的值。

所以结果将是 3 x 2,相当于sample[c(1, 3, 5), c(1, 4)]

使用时,[您可以将其读取为subset. 所以返回这两个表达式所在的 [rows, columns]TRUE

于 2013-09-06T22:36:54.950 回答