如果您可以原谅我对循环的兴趣,我想知道如何循环遍历变量名向量(在我的用例中必须是字符串)并改变原始列。i在这个玩具示例中,我想计算plus列的平均值z。
df_have <- data.frame(x=c(1, 1, 2, 3, 3),
y=c(2, 2, 3, 4, 4),
z=c(0, 1, 2, 3, 4))
for (i in c("x", "y")) {
df_test <-
df_have %>%
mutate(!!i := mean(i)+z)
}
df_want <- data.frame(x=c(2, 3, 4, 5, 6), # mean 2 + z
y=c(3, 4, 5, 6, 7), # mean 3 + z
z=c(0, 1, 2, 3, 4))
Run Code Online (Sandbox Code Playgroud)
好吧,如果你想做一个循环,那么
df_test <- df_have
for (i in c("x", "y")) {
df_test <-
df_test %>%
mutate(!!i := mean((!!as.name(i)))+z)
}
Run Code Online (Sandbox Code Playgroud)
请注意,您需要将这些字符串转换为符号才能在 mutate 表达式中使用。在这种情况下,一个更简单的技巧是
df_have %>% mutate_at(c("x","y"), funs(mean(.)+z))
Run Code Online (Sandbox Code Playgroud)