2011-09-11 28 views
5

我有一個x座標和y座標的2列數據框。我想生成每個點出現次數的表格。使用table()命令爲所有可能的x-y對生成一個表。我可以消除與在R中沒有「by」細分的情況下在R中的多個列上聚合表()

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 

回答

9

只需使用香草R,你可以做

aggregate(rep(1, nrow(coords)), by = list(x = coords$x, y = coords$y), sum) 
+0

正是我正在尋找。謝謝! – Gregor

+1

'coords'是一個data.frame(它已經是一個列表),所以稍微縮短的解決方案是:'aggregate(coords $ x,by = coords,length)'。 –

4

您可以使用ddplyplyr

plyr::ddply(coords, .(x, y), summarize, count = length(x)) 
7

乙埃特比ddply就是count

library(plyr) 
count(coords) 

這是一個很大的速度比表稀疏2D結果了。

4

你也可以使用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 

this answer關於使用.N更多的細節和創建頻數表與data.table

1

添加dplyr方法:

library(dplyr) 
group_by(coords, x, y) %>% 
    summarize(count = n()) 
相關問題