我想做这样的事情
df <- iris %>%
rowwise %>%
mutate(new_var = sum(Sepal.Length, Sepal.Width))
除非我想在不输入变量名的情况下这样做,例如
names_to_add <- c("Sepal.Length", "Sepal.Width")
df <- iris %>%
rowwise %>%
[some function that uses names_to_add]
我尝试了一些例子。
df <- iris %>%
rowwise %>%
mutate(new_var = sum(sapply(names_to_add, get, envir = as.environment(.))))
但仍然无法弄明白。我会采用与lazyeval或更简单的东西相关的答案。请注意,这里的sum
函数只是一个占位符,我的实际函数要复杂得多,尽管它每行返回一个值。我也不愿意使用data.table
答案 0 :(得分:0)
您应该查看_
中以dplyr
结尾的所有功能。示例mutate_
,summarise_
等
names_to_add <- ("sum(Sepal.Length, Sepal.Width)")
df <- iris %>%
rowwise %>% mutate_(names_to_add)
修改强>
代码的结果:
df <- iris %>%
rowwise %>% mutate(new_var = sum(Sepal.Length, Sepal.Width))
names_to_add <- ("sum(Sepal.Length, Sepal.Width)")
df2 <- iris %>%
rowwise %>% mutate_(new_var = names_to_add)
identical(df, df2)
[1] TRUE
答案 1 :(得分:-1)
修改强>
我编辑了答案,它解决了问题。我想知道为什么它被donwvoted。
我们使用SE(标准评估),在'mutate_'中传递一个字符串作为输入。更多信息:vignette("nse","dplyr")
x <- "Sepal.Length + Sepal.Width"
df <- mutate_(iris, x)
head(df)
输出:
Sepal.Length Sepal.Width Petal.Length Petal.Width Species Sepal.Length + Sepal.Width
1 5.1 3.5 1.4 0.2 setosa 8.6
2 4.9 3.0 1.4 0.2 setosa 7.9
3 4.7 3.2 1.3 0.2 setosa 7.9
4 4.6 3.1 1.5 0.2 setosa 7.7
5 5.0 3.6 1.4 0.2 setosa 8.6
6 5.4 3.9 1.7 0.4 setosa 9.3