指定dplyr列名[重复]

5cg8jx4n  于 2023-03-27  发布在  其他
关注(0)|答案(5)|浏览(117)

此问题在此处已有答案

Group by multiple columns in dplyr, using string vector input(10个答案)
六年前关闭了。
如果我不知道列名,但想通过变量指定它,如何将列名传递给dplyr?
例如,这起作用:

require(dplyr)
df <- as.data.frame(matrix(seq(1:9),ncol=3,nrow=3))
df$group <- c("A","B","A")
gdf <- df %.% group_by(group) %.% summarise(m1 =mean(V1),m2 =mean(V2),m3 =mean(V3))

但这并不

require(dplyr)
someColumn = "group"
df <- as.data.frame(matrix(seq(1:9),ncol=3,nrow=3))
df$group <- c("A","B","A")
gdf <- df %.% group_by(someColumn) %.% summarise(m1 =mean(V1),m2 =mean(V2),m3 =mean(V3))
kxxlusnw

kxxlusnw1#

我只是在Group by multiple columns in dplyr, using string vector input上给出了类似的答案,但这是为了更好地衡量:dplyr中添加了允许使用字符串对列进行操作的函数。这些函数与常规dplyr函数的名称相同,但以下划线结尾。这些函数在this vignette中有详细描述。
给定OP中的dfsomeColumn,现在可以很好地工作了:

gdf <- df %>% group_by_(someColumn) %>% summarise(m1=mean(V1),m2=mean(V2),m3=mean(V3))

请注意,它是group_by_,而不是group_by,并且使用%>%运算符,因为%.%已被弃用。

f5emj3cl

f5emj3cl2#

这里有一个简单问题的答案,通过挑选哈德利对他发布的欺骗的解决方案来获得。

gdf <- df %.% regroup( lapply( someColumn, as.symbol)) %.% summarise(m1 =mean(V1),m2 =mean(V2),m3 =mean(V3))

FWIW,我的用例涉及按一个变量列和一个常量列分组。解决方案是:

gdf <- df %.% regroup( lapply( c( 'constant_column', someColumn), as.symbol)) %.% summarise(m1 =mean(V1),m2 =mean(V2),m3 =mean(V3))

最后,发布的eval解决方案不起作用。这只是创建了一个新列,其值都是someColumneval的值。

w6mmgewl

w6mmgewl3#

你可以使用summarise_如下:

plotVar         = "Stocks_US_TotalCrudeOil"
dfBand <- mydf[ c( plotVar ,  "year", "week"  )  ] %>%
            filter ( year %in% bandYears )   %>%
            group_by (  week )   %>% 
            summarise_ (   ymini =  paste( "min(" ,  as.name(plotVar)  ,")"  ) 
                         , ymaxi =  paste( "max(" ,  as.name(plotVar)  ,")"  )     )
dfBand
avwztpqn

avwztpqn4#

pollutant <- "sulfate"
summarise(data, mean(eval(as.symbol(pollutant)), na.rm = TRUE))

我试着为我自己的问题问同样的问题,然后我找到了一个解决方案,我用eval(as.symbol())封装了表达式。

jjhzyzn0

jjhzyzn05#

我希望你只需要使用eval

require(dplyr)
someColumn = "group"
df <- as.data.frame(matrix(seq(1:9),ncol=3,nrow=3))
df$group <- c("A","B","A")
gdf <- df %.% group_by(eval(someColumn)) %.% summarise(m1 =mean(V1),m2 =mean(V2),m3 =mean(V3))

相关问题