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