【发布时间】:2017-12-24 19:30:54
【问题描述】:
我花了很多时间尝试编写一个循环来将数据框中某些列的 NA 替换为零,但尚未成功。我已经搜索过,找不到类似的问题。
df <- data.frame(A = c(2, 4, 6, NA, 8, 10),
B = c(NA, 10, 12, 14, NA, 16),
C = c(20, NA, 22, 24, 26, NA),
D = c(30, NA, NA, 32, 34, 36))
df
给我:
A B C D
1 2 NA 20 30
2 4 10 NA NA
3 6 12 22 NA
4 NA 14 24 32
5 8 NA 26 34
6 10 16 NA 36
我只想将列 B 和 D 的 NA 设置为 0。使用单独的代码行,我可以:
df$B[is.na(df$B)] <- 0
df$D[is.na(df$D)] <- 0
但是,我想使用循环,因为我的真实数据集中有很多变量。
我找不到只遍历列 B 和 D 的方法,所以我得到:
df
A B C D
1 2 0 20 30
2 4 10 NA 0
3 6 12 22 0
4 NA 14 24 32
5 8 0 26 34
6 10 16 NA 36
本质上,我想将使用变量列表的循环应用于数据框:
varlist <- c("B", "D")
如何使用变量列表仅遍历数据框中的某些列以将 NA 替换为零?
【问题讨论】:
-
不需要循环。试试
df[varlist] <- replace(df[varlist], is.na(df[varlist]), 0)