require(dplyr)
df <- data.frame(Date.time = c("2015-01-01 00:00:00", "2015-01-01 00:30:00", "2015-01-01 01:00:00", "2015-01-01 01:30:00", "2015-01-01 02:00:00"),
RH33HMP = c(99.6,99.6,99.5,99.3,98.63),
RH33HMP_f = c(9,9,92,93,9),
RH38HMP = c(99.6,99.6,99.5,99.3,98.63),
RH38HMP_f = c(9,902,9,9,91))
这里有一些示例数据框。我想把每个特征列中,对应质量列(_f)中不是9的值都设为
NA
。首先,我使用grep找到实际测量的列号:col_var <- grep("^Date.|_f$", names(df), invert = T)
然后我使用dplyr
和mutate_at
函数,加上if_else
条件语句。我的问题是,虽然mutate_at
在所有col_val
列中迭代,但函数本身并不迭代。我尝试了一些在stackoverflow上找到的示例,但似乎没有一个能够解决我的问题。
# does not work
df_qc <- df %>%
mutate_at(.vars = col_var,
.funs = list(~ ifelse(df[, col_var+1] == 9, ., NA)))
i=1
df_qc <- df %>%
mutate_at(.vars = col_var,
.funs = list(~ ifelse(df[, i+1] == 9, ., NA)))
我认为我已经很接近了,需要任何帮助。