19

列名がわからないが、変数を介して指定したい場合、列名を 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))
4

5 に答える 5

3

これは、投稿されただまされたハドリーの解決策を選択することによって得られた、この簡単な質問に対する答えです。

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の目的である新しい列を作成するだけです。

于 2014-02-04T20:14:09.980 に答える
0

次のように 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
于 2015-10-21T16:42:34.537 に答える
-1

ここに画像の説明を入力

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

私は自分の問題について同じ質問をしようとしていました。それから私はそれに対する解決策を見つけました。式を eval(as.symbol()) でカプセル化します。

于 2014-05-16T21:49:58.040 に答える
-2

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))
于 2014-02-02T21:04:10.263 に答える