Указать имена столбцов 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))
Ответы
Ответ 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))