Подтвердить что ты не робот

Указать имена столбцов dplyr

Как передать имена столбцов в 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))
4b9b3361

Ответ 1

Я просто дал аналогичный ответ в Группе по нескольким столбцам в dplyr, используя ввод векторных строк, но для хорошей меры: функции, которые позволяют вам работать с столбцами с помощью строк добавлены к dplyr. Они имеют то же имя, что и обычные функции dplyr, но заканчиваются подчеркиванием. Функции подробно описаны в этой виньетке.

Учитывая df и someColumn из OP, теперь это работает:

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

Обратите внимание, что это group_by_, а не group_by, а оператор %>% используется как %.% устарел.

Ответ 2

Вот ответ на этот простой вопрос, полученный путем выбора решения хасли в его опубликованном обмане.

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 to. Я еще не достаточно крут, чтобы оставить комментарий или уменьшить его.

Ответ 3

Вы можете использовать summaryise_ следующим образом:

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

Ответ 4

enter image description here

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

Я пытался задать тот же вопрос для своей проблемы. Тогда я нашел решение. Я инкапсулирую выражение с помощью eval (as.symbol()).

Ответ 5

Я ожидаю, что вам просто нужно использовать 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))