首页 > 解决方案 > 如何在 R 中使用 for 循环处理数据帧?

问题描述

### 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 行&gt; (または長さ 0 の row.names) 

我想做与 Part2 中的 Part1 相同的事情。但不知何故,我在第 2 部分中得到了不同的 data.frame。使用 for 循环我错了吗?

标签: rdataframe

解决方案


如果你真的想使用循环

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]列名。idata5


如果您的目标是删除所有NA带有s的行,您可以很容易地做到这一点而无需循环。

na.omit(data5)

推荐阅读