如果我不知道列名,但希望通过变量指定列名,我如何将列名传递给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))发布于 2014-10-31 13:13:43
我刚刚在Group by multiple columns in dplyr, using string vector input上给出了类似的答案,但为了好的起见:在dplyr中添加了允许使用字符串对列进行操作的函数。这些函数与常规dplyr函数具有相同的名称,但以下划线结尾。在this vignette中对这些函数进行了详细描述。
给定OP中的df和someColumn,现在可以很好地工作了:
gdf <- df %>% group_by_(someColumn) %>% summarise(m1=mean(V1),m2=mean(V2),m3=mean(V3))请注意,它是group_by_,而不是group_by,并且使用%>%运算符是因为%.%已弃用。
发布于 2014-02-05 04:14:10
以下是这个简单问题的答案,通过挑选hadley对他发布的受骗的解决方案而获得。
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解决方案不起作用。这就创建了一个新列,它的值都是someColumn eval的值。
发布于 2015-10-22 00:42:35
您可以按如下方式使用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) ,")" ) )
dfBandhttps://stackoverflow.com/questions/21390141
复制相似问题