gpt4 book ai didi

r - dplyr::mutate_at 遍历函数中的列

转载 作者:行者123 更新时间:2023-12-03 19:15:26 25 4
gpt4 key购买 nike

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 以外的其他内容.首先,我用实际测量值 grep 列号:
col_var <- grep("^Date.|_f$", names(df), invert = T)

然后我使用 dplyrmutate_atif_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)))

我想我很接近,任何帮助表示赞赏。

最佳答案

我们可以使用 Map :

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

同样,您可以使用 map2purrr如果您愿意 tidyverse .
df[col_var] <- purrr::map2(df[col_var + 1],df[col_var], ~{.y[.x != 9] <- NA;.y})

关于r - dplyr::mutate_at 遍历函数中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60849543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com