2015-09-16 2 views
0

Имея данные в data.frame, я хотел бы объединить некоторые столбцы (используя любую общую функцию), группируя некоторые другие, сохраняя оставшиеся, как они есть (или даже опуская их). Модой является вызов функции group by в SQL. В качестве примера давайте предположим, что мы имеемСовокупность нескольких столбцов в соответствии с некоторыми другими

df <- data.frame(a=rnorm(4), b=rnorm(4), c=c("A", "B", "C", "A")) 

и я хочу подвести (скажем) значения в столбце a и средние (скажем) значений в столбце b, группируя символами в колонке c. Я знаю, что можно достичь такого использования apply, cbind или аналогий, указав функции, которые вы хотите использовать, но мне было интересно, если бы был более умный (с одной строкой) способ (особенно с использованием функции aggregate).

+0

это был задан Gazillion раз, смотрите здесь http://stackoverflow.com/questions/18799901/data-frame-group-by-column и здесь http://stackoverflow.com/questions/6289538/aggregate-a-dataframe-on-a-given-column-and-display-another-column и здесь http://stats.stackexchange.com/questions/8225/how-to-summarize-data-by-group- in-r – grrgrrbla

+0

@grrgrrbla Пожалуйста, проголосуйте, чтобы закрыть как дубликат в этом случае. –

+0

Возможный дубликат [Использование агрегата для множественных агрегаций] (http://stackoverflow.com/questions/12064202/using-aggregate-for-multiple-aggregations) –

ответ

2

Извините, но я не понимаю, как справляться с более чем одной колонкой усложняет ситуацию.

library(data.table) 
dt <- data.table(df) 
dt[,.(sum_a = sum(a),mean_b= mean(b)),by = c] 
+0

Что делать, если я хочу группировать более одного столбца 'c'? Каким будет правильный синтаксис? – gented

+0

df <- data.frame (a = rnorm (6), b = rnorm (6), c = c («A», «B», «C», «A», «D», «A») , d = c (rep (буквы [1: 3], 2))); dt <- data.table (df); dt [,. (sum_a = sum (a), mean_b = mean (b)), by =. (c, d)] – HywelMJ

1

нравится это?

mapply(Vectorize(function(x, y) aggregate(
     df[, x], by=list(df[, 3]), FUN=y), SIMPLIFY = F), 
     1:2, c('sum', 'mean')) 
+0

Это дает мне: [, 1] [, 2] Фактор группы 1, 3 фактора , 3 x Числовое, 3 Числовое, 3 – HywelMJ

+0

Это работает сейчас. – HywelMJ

Смежные вопросы