我尝试使用summarise()
基于动态列名创建列。我发现我可以很容易地用粘合语法"{}"
和:=
创建动态名称,但是我不知道如何在另一个mutate()
函数中引用这些列。
根据我在网上读到的提示,常见的解决方案是使用{{varname}}
或将varname_enq <- enquo(varname)
与!!varname_enq
一起使用。不幸的是,这两种方法对我都不起作用。
到目前为止,我已经看了其他SO职位以及Programming with dplyr guide。我非常感谢你能给予我的所有建议!
下面是一个小例子,突出了这个问题。
This is the goal:
# A tibble: 3 × 3
Species species_sum cumulative_sum
<fct> <dbl> <dbl>
1 setosa 250. 250.
2 versicolor 297. 547.
3 virginica 329. 876.
mycol <- "species_sum"
mycol_enquo <- enquo(mycol)
myothercol <- "cumulative_sum"
# this works, but the cumulative sum isn't dynamic
iris %>%
group_by(Species) %>%
summarise("{mycol}" := sum(Sepal.Length)) %>%
ungroup() %>%
mutate(cumulative_sum = cumsum(species_sum))
# this works, but the cumsum function still uses a fixed variable name
iris %>%
group_by(Species) %>%
summarise("{mycol}" := sum(Sepal.Length)) %>%
ungroup() %>%
mutate("{myothercol}" := cumsum(species_sum))
# doesn't work, the new column is all NA
iris %>%
group_by(Species) %>%
summarise("{mycol}" := sum(Sepal.Length)) %>%
ungroup() %>%
mutate("{myothercol}" := cumsum( "{mycol}" ))
# doesn't work, the new column is all NA
iris %>%
group_by(Species) %>%
summarise("{mycol}" := sum(Sepal.Length)) %>%
ungroup() %>%
mutate("{myothercol}" := cumsum( {{mycol}} ))
# doesn't work, the new column is all NA
iris %>%
group_by(Species) %>%
summarise("{mycol}" := sum(Sepal.Length)) %>%
ungroup() %>%
mutate("{myothercol}" := cumsum( !!mycol_enquo ))
3条答案
按热度按时间okxuctiv1#
字符串
kokeuurv2#
这样行吗?
要用字符向量指定变量,
.data
是您的朋友。字符串
或者,您可以使用
across()
型
68bkxrlz3#
另一种选择是使用
sym()
将字符串转换为符号,然后我们使用!!
取消引号。注意,与{{
相反,我们必须使用"
: