我正在尝试循环访问一个数据框中的列,以使用另一个数据框中的列的值来过滤其值。我还在学习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 |
1条答案
按热度按时间qzlgjiam1#
我认为你给出的代码示例中的错误可能来自第二个for语句中的括号,它应该是
for (j in ...)
而不是for j in (...)
。有很多方法可以做到这一点,但最简单的可能只是使用“base R”子集。
首先,我将为示例构造一些数据:
字符串
现在,我们使用子集。R允许您通过在数据对象名称后面的
[]
中输入行和列索引来子集化数据框,第一个空格用于行,第二个用于列。所以df1[1,2]
返回第二列第一行的单元格。如果您将这些输入中的一个留空,则R假设您希望每一行(或列)都与提供的其他行/列条件相匹配。有了这个,我们可以做更复杂的子集:型
这里,
%in%
返回dt$v1
的值,这些值在dt2$v3
中,由于columns输入为空,因此它返回dt2
的行中与行条件匹配的所有列。所以我们创建了dt3
,它是dt2
的子集。这为您提供:型