【发布时间】:2017-09-27 07:50:14
【问题描述】:
我正在尝试将 12 小时后包含单词“length”的变量的所有值更改为 NA。
df_data <- cbind(
seq(0, 15, by = 0.5),
sample(seq(from = 100, to = 300, by = 10), size = 31, replace = TRUE),
sample(seq(from = 1, to = 100, by = 9), size = 31, replace = TRUE),
sample(seq(from = 50, to = 60, by = 2), size = 31, replace = TRUE),
sample(seq(from = 100, to = 130, by = 1), size = 31, replace = TRUE)
) %>% as.data.frame()
colnames(df_data) <- c("hour", "a", "a_lenght", "b", "b_length")
df_new <- df_data %>%
mutate_if(vars(contains("length")), funs(ifelse(df_data$hour > 12, NA, .)))
但我收到 Can't convert a list to function 错误
【问题讨论】:
-
使用
mutate_at而不是mutate_if。您提供了一个.vars参数(选定列的列表),但mutate_if需要一个.predicate函数(评估为 TRUE/FALSE) -
谢谢,我也可以用
grepl-mutate_if(grepl(pattern = 'length', x = names(df_data)),funs(ifelse(df_data$hour>12,NA,.)))修复它