Как суммировать переменную по группе - PullRequest
298 голосов
/ 02 ноября 2009

Допустим, у меня есть два столбца данных. Первый содержит такие категории, как «Первый», «Второй», «Третий» и т. Д. Второй содержит числа, которые представляют количество раз, которое я видел «Первый».

Например:

Category     Frequency
First        10
First        15
First        5
Second       2
Third        14
Third        20
Second       3

Я хочу отсортировать данные по категориям и суммировать частоты:

Category     Frequency
First        30
Second       5
Third        34

Как бы я это сделал в R?

Ответы [ 13 ]

4 голосов
/ 03 декабря 2018

Недавно добавленный dplyr::tally() теперь делает это проще, чем когда-либо:

tally(x, Category)

Category     n
First        30
Second       5
Third        34
3 голосов
/ 18 ноября 2018

Вы можете использовать функцию group.sum из пакета Rfast .

Category <- Rfast::as_integer(Category,result.sort=FALSE) # convert character to numeric. R's as.numeric produce NAs.
result <- Rfast::group.sum(Frequency,Category)
names(result) <- Rfast::Sort(unique(Category)
# 30 5 34

Rfast имеет много групповых функций, и group.sum является одной из них.

2 голосов
/ 25 февраля 2018

с использованием cast вместо recast (примечание 'Frequency' теперь 'value')

df  <- data.frame(Category = c("First","First","First","Second","Third","Third","Second")
                  , value = c(10,15,5,2,14,20,3))

install.packages("reshape")

result<-cast(df, Category ~ . ,fun.aggregate=sum)

чтобы получить:

Category (all)
First     30
Second    5
Third     34
...