我想打印一个大型数据框的行和列,其中值也出现在另一个数据框的给定行或列中。我正在尝试基于与值列表的巧合的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
有什么建议吗?
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
named列的哪些行。换句话说,我在第1、3和5行中找到匹配的值。V1
info.row
相似地:
> sample[1,] %in% info.column[, 1]
[1] TRUE FALSE FALSE TRUE FALSE
说我想在第一行中找到sample
data.frame第一列的位置的列info.column
。再说一次,我在第1列和第4列中找到匹配的值。
因此结果将是3 x 2并等于 sample[c(1, 3, 5), c(1, 4)]
使用时,[
您可以将其读取为subset
。因此,返回[行,列]这两个表达式所在的位置TRUE
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句