dplyr::在函数中迭代列时进行mutate_
然后我使用dplyr::在函数中迭代列时进行mutate_,r,dplyr,R,Dplyr,然后我使用dplyr和mutate\u at和if\u else函数。我的问题是,mutate_at会迭代col_val的所有列,但函数本身不会。我尝试了在stackoverflow上找到的几个示例,但它们似乎都不起作用 col_var <- grep("^Date.|_f$", names(df), invert = T) #不起作用 df_质量控制% 在(.vars=col_var)处突变, .funs=list(~ifelse(df[,col_var+1]==9,NA))) i=1
dplyr
和mutate\u at
和if\u else
函数。我的问题是,mutate_at
会迭代col_val
的所有列,但函数本身不会。我尝试了在stackoverflow上找到的几个示例,但它们似乎都不起作用
col_var <- grep("^Date.|_f$", names(df), invert = T)
#不起作用
df_质量控制%
在(.vars=col_var)处突变,
.funs=list(~ifelse(df[,col_var+1]==9,NA)))
i=1
df_质量控制%
在(.vars=col_var)处突变,
.funs=list(~ifelse(df[,i+1]==9,,,NA)))
我想我已经很接近了,非常感谢您的帮助。我们可以使用
Map
:
# 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)))
一个
dplyr
和purrr
选项可以是:
df[col_var] <- purrr::map2(df[col_var + 1],df[col_var], ~{.y[.x != 9] <- NA;.y})
map2\u dfr(.x=df%>%
选择(以“HMP”结尾),
.y=df%>%
选择(以(“\u f”)结尾),
~replace(.x,.y!=9,NA))%>%
绑定列(df%>%
选择(以“HMP”结尾)
RH33HMP RH38HMP日期时间RH33HMP_f RH38HMP_f
1 99.6 99.6 2015-01-01 00:00:00 9 9
299.6NA 2015-01-01 00:30:009902
3 NA 99.5 2015-01-01 01:00:00 92 9
4 NA 99.3 2015-01-01 01:30:00 93 9
598.6北美2015-01-01 02:00:00 9 91
非常感谢您的努力。我接受了另一个答案,因为我想保留质量标志总是在实际测量之后的下一列的想法。您的答案需要明确的测量列名称,因为我有几个不同的仪器,名称不同,所以需要一段时间才能将它们全部列出。
df[col_var] <- Map(function(x, y) {y[x != 9] <- NA;y},df[col_var + 1],df[col_var])
df
# Date.time RH33HMP RH33HMP_f RH38HMP RH38HMP_f
#1 2015-01-01 00:00:00 99.60 9 99.6 9
#2 2015-01-01 00:30:00 99.60 9 NA 902
#3 2015-01-01 01:00:00 NA 92 99.5 9
#4 2015-01-01 01:30:00 NA 93 99.3 9
#5 2015-01-01 02:00:00 98.63 9 NA 91
df[col_var] <- purrr::map2(df[col_var + 1],df[col_var], ~{.y[.x != 9] <- NA;.y})
map2_dfr(.x = df %>%
select(ends_with("HMP")),
.y = df %>%
select(ends_with("_f")),
~ replace(.x, .y != 9, NA)) %>%
bind_cols(df %>%
select(-ends_with("HMP")))
RH33HMP RH38HMP Date.time RH33HMP_f RH38HMP_f
<dbl> <dbl> <fct> <dbl> <dbl>
1 99.6 99.6 2015-01-01 00:00:00 9 9
2 99.6 NA 2015-01-01 00:30:00 9 902
3 NA 99.5 2015-01-01 01:00:00 92 9
4 NA 99.3 2015-01-01 01:30:00 93 9
5 98.6 NA 2015-01-01 02:00:00 9 91