【发布时间】:2016-06-05 13:02:00
【问题描述】:
我是新的 R 用户。我也知道以前有人问过并回答过类似的问题,但我无法弄清楚。目标是使用循环函数将一组变量中的 NA 替换为 0 值。显然,这是一个超级简单的循环函数,但我不知道为什么它没有做它应该做的事情。
两个额外的偏好,使用变量名(而不是列号)和使用 dplyr 的建议是首选。
提前感谢您的宝贵时间!
图书馆
library(plyr)
library(dplyr)
样本数据
y <- structure(list(pid = c(1002L, 1002L, 1002L, 1002L, 1002L, 1002L,1002L, 1002L, 1002L, 1002L), year = 1968:1977, weeks_hd_e = c(3,0, 50, 49, 50, 50, 50, 50, 50, 49), weeks_wf_e = c(4, 6, 0, 0,0, 0, 0, 0, 0, 0), weeks_hd_u = c(NA, NA, 0, 0, 0, 0, 0, 0, 0,0), weeks_hd = c(NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,NA_real_, NA_real_, NA_real_, NA_real_, NA_real_), weeks_wf_u = c(NA,NA, NA, NA, NA, NA, NA, NA, 0, NA), weeks_wf = c(NA_real_, NA_real_,NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,NA_real_)), .Names = c("pid", "year", "weeks_hd_e", "weeks_wf_e","weeks_hd_u", "weeks_hd", "weeks_wf_u", "weeks_wf"), row.names = c(NA,10L), class = "data.frame")
此命令有效
y <- mutate(y, i = ifelse(!is.na(i), i, 0))
这个循环没有
vars <- c("weeks_hd_e", "weeks_hd_u", "weeks_wf_e", "weeks_wf_u", "weeks_hd", "weeks_wf")
for (i in names(vars)) {
y <- mutate(y, i = ifelse(!is.na(i), i, 0))
}
View(y)
【问题讨论】:
-
names(vars)指的是对象名称,正如您在循环示例中给我们的那样,vars中不存在这些名称。(i in vars){etc}是否解决了您的问题? -
嗯...不,不幸的是,这没有任何区别
标签: string loops for-loop dplyr na