删除基于单独向量的DataFrame行?

时间:2018-10-30 17:08:26

标签: r dataframe vector

我有一个包含NA值和字符串组合的向量:

v <- c(NA, NA, "text", NA)

我还有一个单独的数据框:

df <- data.frame("Col1" = 1:4, "Col2" = 5:8)

Col1   Col2
1      5
2      6
3      7
4      8

我的目标是删除df中对应的v值为NA的行。因此,在这种情况下,输出将仅为:

Col1   Col2
3      7

由于v的第三个元素是唯一一个不为NA的元素,因此仅保留df的第三行。我尝试使用for循环来完成此操作:

for (i in 1:length(v)) {
    if (is.na(v[i])) {
        df <- df[-i, ]
    }
}

但是,由于某种原因,它仅输出df的版本,其中仅包含第二行和第四行:

Col1   Col2
2      6
4      8

我不知道循环为什么不起作用。任何建议表示赞赏!

1 个答案:

答案 0 :(得分:1)

这可以做到-

df[!is.na(v), ]

您不需要循环。您始终可以使用行索引向量或逻辑向量(TRUEFALSE)对任何数据帧进行子集设置。 !is.na(v)基于v生成逻辑向量,并相应地对数据帧进行子集处理。