dplyr按行变异,无需硬编码名称
我想做这样的事情dplyr按行变异,无需硬编码名称,r,dplyr,R,Dplyr,我想做这样的事情 df <- iris %>% rowwise %>% mutate(new_var = sum(Sepal.Length, Sepal.Width)) df% 行%>% 变异(新值=总和(萼片长度,萼片宽度)) 除非我不想输入变量名,例如 names_to_add <- c("Sepal.Length", "Sepal.Width") df <- iris %>% rowwise %>% [some function t
df <- iris %>%
rowwise %>%
mutate(new_var = sum(Sepal.Length, Sepal.Width))
df%
行%>%
变异(新值=总和(萼片长度,萼片宽度))
除非我不想输入变量名,例如
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(.))))
df%
行%>%
mutate(new_var=sum(sappy(names_to_add,get,envir=as.environment())
但还是不明白。我会选择一个与懒散有关的答案,或者更简单的答案。注意这里的
sum
函数只是一个占位符,我的实际函数要复杂得多,尽管它每行返回一个值。我也不想使用数据。表
您应该在dplyr
中检查所有以\uuUcode>结尾的函数。示例变异
,总结
等
names_to_add <- ("sum(Sepal.Length, Sepal.Width)")
df <- iris %>%
rowwise %>% mutate_(names_to_add)
names_to_add%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
df%
行%>%突变(新的变量=总和(萼片长度,萼片宽度))
名称\u到\u添加%mutate\u(新的\u变量=名称\u到\u添加)
相同(df,df2)
[1] 真的
编辑
我编辑了答案,它解决了问题。我想知道为什么没有投票。我们使用SE(标准评估),将字符串作为输入传递到“mutate_”中。更多信息:vignette(“nse”、“dplyr”)
简单的基础R-iris$new_var@organic龙舌兰我编辑了我的答案。我得到的输出与第一行代码相同。你尝试了吗?嗨,有机龙舌兰,如果这个或任何答案解决了你的问题,请考虑通过点击复选标记来接受它。这向更广泛的社区表明,你已经找到了一个解决方案,并给回答者和你自己带来了一些声誉。没有义务这样做。
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