【问题标题】:Deleting rows and columns of a data frame based on values of another data frame根据另一个数据框的值删除数据框的行和列
【发布时间】:2013-09-06 22:08:31
【问题描述】:

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

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

有什么建议吗?

【问题讨论】:

  • 这是一个非常基本的问题。您能分享一下您尝试过的方法以及您在哪些地方没有找到合适的答案吗?
  • 如果它太基本,我很抱歉。你能指导我解决类似的问题吗?我已经搜索了很长时间,特别是关于如何分别从 info.column 和 info.row 中制作一个列表,以便稍后应用 for 循环。但如前所述,它不起作用。非常欢迎任何帮助。
  • R 中的子集数据集在每个可用的介绍指南中都有详尽的介绍。将来请在发布到 SO 之前做一些研究。 sample[sample$V1 %in% info.row[, 1], sample[1,] %in% info.column[, 1]]

标签: r list loops dataframe


【解决方案1】:

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

同样:

> 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的[行,列]

【讨论】:

  • 非常感谢,显然我正着迷于寻找基于值列表的 for 循环,它比这简单得多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-01
  • 2019-02-04
  • 2020-11-13
  • 2018-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多