### Part1 --------------------------------------------------------------
data5 <- data.frame(late_AMD_1st=c(1, NA, 3, 4), RVO_1st=c(5, 6, NA, 8))
# late_AMD_1st RVO_1st
# 1 1 5
# 2 NA 6
# 3 3 NA
# 4 4 8
data5 <- subset(data5, !(is.na(data5$late_AMD_1st)))
data5 <- subset(data5, !(is.na(data5$RVO_1st)))
# data5
# late_AMD_1st RVO_1st
# 1 1 5
# 4 4 8
### Part2 --------------------------------------------------------------
data5 <- data.frame(late_AMD_1st=c(1, NA, 3, 4), RVO_1st=c(5, 6, NA, 8))
col_name <- c("late_AMD_1st", "RVO_1st")
for (i in col_name){
data5 <- subset(data5, !(is.na(data5$i)))
}
# data5
# [1] late_AMD_1st RVO_1st
# <0 行> (または長さ 0 の row.names)
我想做与Part2中的Part1相同的事情。但是我以某种方式在Part2中获得了不同的data.frame。我在使用for循环时错了吗?
答案 0 :(得分:1)
如果您真的想使用循环
data5 <- data.frame(late_AMD_1st=c(1, NA, 3, 4), RVO_1st=c(5, 6, NA, 8))
col_name <- c("late_AMD_1st", "RVO_1st")
for (i in col_name){
data5 <- subset(data5, !(is.na(data5[, i])))
}
data5
#late_AMD_1st RVO_1st
#1 1 5
#4 4 8
在这里,data5[, i]
是i
的{{1}}中的列名。
如果您的目标是删除带有data5
的 all 行,则可以轻松地无循环执行此操作。
NA
答案 1 :(得分:0)
除了@Suren的方法na.omit(data5)
之外,您还可以使用以下代码,该代码适用于具有更多列的数据帧
res <- subset(data5,complete.cases(data5))
或
res <- subset(data5,Reduce(`&`,data.frame(!is.na(data5))))
这样
> res
late_AMD_1st RVO_1st
1 1 5
4 4 8