gpt4 book ai didi

r - 在 dplyr mutate_at 调用中使用多列函数

转载 作者:行者123 更新时间:2023-12-03 06:10:38 24 4
gpt4 key购买 nike

我想使用 dplyr 的 mutate_at 函数将函数应用于数据框中的多个列,其中该函数输入直接应用到的列以及数据框中的另一列.

作为一个具体示例,我希望改变以下数据帧

# Example input dataframe
df <- data.frame(
x = c(TRUE, TRUE, FALSE),
y = c("Hello", "Hola", "Ciao"),
z = c("World", "ao", "HaOlam")
)

使用与此类似的 mutate_at 调用

df %>%
mutate_at(.vars = vars(y, z),
.funs = ifelse(x, ., NA))

返回一个看起来像这样的数据框

# Desired output dataframe
df2 <- data.frame(x = c(TRUE, TRUE, FALSE),
y_1 = c("Hello", "Hola", NA),
z_1 = c("World", "ao", NA))

所需的 mutate_at 调用类似于以下对 mutate 的调用:

df %>%
mutate(y_1 = ifelse(x, y, NA),
z_1 = ifelse(x, z, NA))

我知道这可以通过多种方式在基础 R 中完成,但出于可读性、与数据库交互等考虑,我特别希望使用 dplyr 的 mutate_at 函数来实现此目标。

下面是 stackoverflow 上提出的一些类似问题,这些问题没有解决我在这里提出的问题:

adding multiple columns in a dplyr mutate call

dplyr::mutate to add multiple values

Use of column inside sum() function using dplyr's mutate() function

最佳答案

@eipi10 在 @eipi10 对这个问题的评论中回答了这个问题,但我在这里写下它是为了后代。

这里的解决方案是使用:

df %>%
mutate_at(.vars = vars(y, z),
.funs = list(~ ifelse(x, ., NA)))

您还可以将新的 across() 函数与 mutate() 一起使用,如下所示:

df %>%
mutate(across(c(y, z), ~ ifelse(x, ., NA)))

此处使用公式运算符(如 ~ ifelse(...))表明 ifelse(x, ., NA) 是一个匿名函数,在对 mutate_at() 的调用中定义。

这与在调用 mutate_at() 之外定义函数类似,如下所示:

temp_fn <- function(input) ifelse(test = df[["x"]],
yes = input,
no = NA)

df %>%
mutate_at(.vars = vars(y, z),
.funs = temp_fn)

关于 dplyr 中语法更改的注意事项:在 dplyr 版本 0.8.0 之前,您只需编写 .funs = funs(ifelse(x, . , NA)) ,但 funs() 函数已被弃用,并将很快从 dplyr 中删除。

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

24 4 0
文章推荐: R 中的 reshape 与 reshape2
文章推荐: javascript - 将 jquery mmenu 与 Magento 一起使用
文章推荐: javascript - 如何在 html 命令 中使用动态变量,该变量应根据变量进行更改?
文章推荐: dictionary - YAML:具有空值的字典
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com