2016-02-23 3 views
-3

Я делаю регрессионный анализ для данных со слишком большим количеством категориальных уровней. Интересно, как мне агрегировать значения для нескольких категориальных уровней? Например, давайте иметь данные с двумя столбцами A (категориальный) и B (цифрового):агрегированные значения в R по правилу

A B 
1 1 
1 0 
2 3 
2 0 
3 1 
3 2 
4 6 
4 0 

Теперь я хотел объединить смежные уровни в категорической функции переменной А. агрегации суммирование. Результат должен выглядеть так:

A  B 
A1-2 4 
A3-4 9 

Любая помощь приветствуется.

+3

Вы не упомянули, что правило на самом деле. –

ответ

3

Базовый метод R:

aggregate(B ~ A, data=transform(dat, A=cut(A,c(0,2,4),labels=c("A1-2","A3-4"))), FUN=sum) 

#  A B 
#1 A1-2 4 
#2 A3-4 9 
+0

Да, это тоже работает, и это несколько проще. Также регулируемый диапазон отличен, по крайней мере, я понимаю, как его изменить. – Parallax

1

Мы могли бы использовать data.table. Преобразуйте 'data.frame' в 'data.table' (setDT(df1)), создайте новую переменную группировки, используя %/% на основе значений в 'A'. Затем, сгруппированные по «A1», мы получаем sum «B», а также paste элементы unique в «A» вместе. Если это не требуется, переменной группировки «A1» можно присвоить значение NULL.

library(data.table) 
setDT(df1)[, A1:= (A-1)%/%2 +1][, 
    list(A= paste0("A",paste(unique(A), 
      collapse="-")), B= sum(B)) ,A1][,A1:= NULL][] 
#  A B 
#1: A1-2 4 
#2: A3-4 9 
Смежные вопросы