Агрегирование таблицы () по нескольким столбцам в R без разбивки «по» - PullRequest
5 голосов
/ 11 сентября 2011

У меня есть 2-колоночный фрейм данных с координатами x и y точек.Я хочу сгенерировать таблицу количества вхождений каждой точки.Использование команды table() создает таблицу для всех возможных пар xy.Я могу убрать дополнительные функции с помощью

fullTable <- table(coords)
smalLTable <- subset(fullTable, fullTable > 0)

И тогда я уверен, что смогу сделать что-нибудь с dimnames(fullTable), чтобы получить соответствующие координаты, но есть ли лучший способ?Что-то встроено?То, что с

coords <- data.frame(x = c(1, 1, 2, 2, 3, 3), y = c(1, 1, 2, 1, 1, 1))

вернуло бы

x y count
1 1 2
2 1 1
2 2 1
3 1 2

Ответы [ 5 ]

9 голосов
/ 11 сентября 2011

Используя только Vanilla R, вы можете сделать

aggregate(rep(1, nrow(coords)), by = list(x = coords$x, y = coords$y), sum)
7 голосов
/ 14 сентября 2011

Лучше, чем ddply, это count:

library(plyr)
count(coords)

Это намного быстрее, чем таблица для разреженных 2d результатов.

4 голосов
/ 10 сентября 2012

Вы также можете использовать data.table

library(data.table)
DT <- data.table(coords)
DT[,.N,by=list(x,y)]
##   x y N
## 1: 1 1 2
## 2: 2 2 1
## 3: 2 1 1
## 4: 3 1 2

См. этот ответ для получения дополнительной информации об использовании .N и создании таблиц частот с data.table

4 голосов
/ 11 сентября 2011

Вы можете использовать ddply из библиотеки plyr

plyr::ddply(coords, .(x, y), summarize, count = length(x))
1 голос
/ 08 июня 2015

Добавление dplyr метода:

library(dplyr)
group_by(coords, x, y) %>%
  summarize(count = n())
...