列名がわからないが変数で指定したい場合、どのようにして列名を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))
文字列ベクトル入力を使用してdplyrの複数の列でグループ化 で同様の答えを出しただけですが、適切な対策として、文字列を使用して列を操作できる関数が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
であり、%>%
演算子は%.%
が非推奨であるため使用されていることに注意してください。
これは、ハドレーの投稿したデュープに対する解決策を選択することで得られた、この簡単な質問に対する回答です。
gdf <- df %.% regroup( lapply( someColumn, as.symbol)) %.% summarise(m1 =mean(V1),m2 =mean(V2),m3 =mean(V3))
FWIW、私の使用例では、1つの変数列と1つの定数列でグループ化しました。その解決策は:
gdf <- df %.% regroup( lapply( c( 'constant_column', someColumn), as.symbol)) %.% summarise(m1 =mean(V1),m2 =mean(V2),m3 =mean(V3))
最後に、投稿されたeval
ソリューションが機能しません。それは、値がすべてsomeColumn
eval
sになる新しい列を作成するだけです。私はまだコメントを残したり、それを反対票を投じたりするほどクールではありません。
次のように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