我有一个包含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
我不知道循环为什么不起作用。任何建议表示赞赏!
答案 0 :(得分:1)
这可以做到-
df[!is.na(v), ]
您不需要循环。您始终可以使用行索引向量或逻辑向量(TRUE
和FALSE
)对任何数据帧进行子集设置。 !is.na(v)
基于v
生成逻辑向量,并相应地对数据帧进行子集处理。