【发布时间】:2017-01-05 16:55:42
【问题描述】:
我想使用 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
【问题讨论】:
-
df %>% mutate_at(vars(y, z), funs(ifelse(x, ., NA))) -
@eipi10 啊,好的。因此,如果我实际上将
ifelse(x, ., NA)包装在对funs()的调用中,那么上面的代码就会起作用。谢谢!我已经检查了您的解决方案,并且效果很好。您的解决方案正是我想要的!