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))
Вот пример data.frame. Я хотел бы установить каждое значение на NA
, где соответствующий столбец качества (_f)
содержит что-то другое, чем 9
. Сначала я сопоставляю номер столбца с фактическими измерениями:
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)))
Я думаю, что я довольно близок, любая помощь приветствуется.