R语言 使用另一个数据框的值过滤数据框

qoefvg9y  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(98)

我正在尝试循环访问一个数据框中的列,以使用另一个数据框中的列的值来过滤其值。我还在学习R,所以我不确定我错在哪里。
这是我最新的尝试:

List <- function(df1,df2){ 
     for ( i in df1$Name) {
          for j in (df2$Name) {
               if ( i == j ) {
                   df1[-c(i),]
}
}
}
}

字符串

  • 更新:上面的代码现在给我“c(x,)中的错误:参数2为空”

给定df 1和df 2
| 第2栏| Column 2 |
| --| ------------ |
| 无| none |
| 行| row |
| 第2栏| Column 2 |
| --| ------------ |
| 行| row |
| 行| row |
| 无| none |
输出将是
| 第2栏| Column 2 |
| --| ------------ |
| 行| row |

qzlgjiam

qzlgjiam1#

我认为你给出的代码示例中的错误可能来自第二个for语句中的括号,它应该是for (j in ...)而不是for j in (...)
有很多方法可以做到这一点,但最简单的可能只是使用“base R”子集。
首先,我将为示例构造一些数据:

dt1 <- data.frame(
    v1 = c(4, 5, 9, 14, 7, 1),
    v2 = c(12, 9, 17, 4, 2, 1)
)
dt2 <- data.frame(
    v3 = c(4, 0, 1, 10, 7, 1),
    v4 = c("a", "f", "s", "g", "w", "z")
)

字符串
现在,我们使用子集。R允许您通过在数据对象名称后面的[]中输入行和列索引来子集化数据框,第一个空格用于行,第二个用于列。所以df1[1,2]返回第二列第一行的单元格。如果您将这些输入中的一个留空,则R假设您希望每一行(或列)都与提供的其他行/列条件相匹配。有了这个,我们可以做更复杂的子集:

dt3 <- dt2[dt1$v1 %in% dt2$v3, ]


这里,%in%返回dt$v1的值,这些值在dt2$v3中,由于columns输入为空,因此它返回dt2的行中与行条件匹配的所有列。所以我们创建了dt3,它是dt2的子集。这为您提供:

> dt3
   v1 v2
1  4 12
5  7  2
6  1  1

相关问题