我想使用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上的问题,它们并没有解决我在这里提出的问题:
df %>% mutate_at(vars(y, z), funs(ifelse(x, ., NA)))
这行代码意思是对于数据框df中的变量y和z,如果x为真,则保留原值,否则将其设为NA,并返回处理后的数据框。 - eipi10ifelse(x, ., NA)
包装在funs()
的调用中就可以工作了。谢谢!我已经检查了您的解决方案,它完美地解决了问题。您的解决方案正是我一直在寻找的! - bschneidr