我有以下数据集:
df_x <- data.frame(year = c(2000, 2000, 2000, 2001, 2001, 2001, 2002, 2002, 2002),
a = c(7, 3, 5),
b = c(5, 8, 1),
c = c(8, 4, 3))
这个向量
v <- c("a", "b", "c")
现在,我想创建一个新的数据集,并通过创建新变量(y_a
、y_b
和y_c
)来汇总a、b和c,这些变量计算按年份分组的每个变量的平均值。
执行此操作的代码如下所示:
y <- df_x %>% group_by(year) %>% dplyr::summarise(y_a = mean(a, na.rm = TRUE),
y_b = mean(b, na.rm = TRUE),
y_c = mean(c, na.rm = TRUE))
但是,我想使用向量v
从其中读取相应的变量并粘贴到summarise函数中:
y <- df_x %>% group_by(year) %>% dplyr::summarise(as.name(paste0("y_", v[1])) = mean(as.name(v[1]), na.rm = TRUE),
as.name(paste0("y_", v[2])) = mean(as.name(v[1]), na.rm = TRUE),
as.name(paste0("y_", v[3])) = mean(as.name(v[1]), na.rm = TRUE))
执行此操作时,我收到以下错误消息:
Error: unexpected '=' in "y <- df_x %>% group_by(year) %>% dplyr::summarise(as.name(paste0("y_", v[1])) ="
如何在summarise函数中粘贴一个向量的值以使其工作?
3条答案
按热度按时间daolsyd01#
要在左手定义新变量,您需要
:=
而不是=
。因为使用paste0
创建它,所以需要!!
来注入表达式并确保正确计算。要使用存储在变量中的字符串访问dplyr
中的现有列,使用.data
是最简单的方法。由reprex package(v1.0.0)于2022年12月21日创建
6ju8rftf2#
这是一个单线过孔基底R,
cunj1qz13#
使用
across
并使用.names
修改名称会更容易