在R中,我想以最快的方式找到数据帧唯一行的出现次数。
我有超过200万行,但数据适合我的16GB内存机器 table和ftable很快但是唯一组合的数量超过了它们可以处理的数量,所以我收到一条错误消息。
感谢
史蒂夫
答案 0 :(得分:3)
使用count
包中的plyr
。它避免了数据中没有出现的组合(与表格等相反)。
答案 1 :(得分:1)
如果问题是获得唯一线的数量:
sum(!duplicated(dfrm))
如果问题是要获得独特的线条:
dfrm[!duplicated(dfrm), ]
如果您想要一个独特组合的表,那么请考虑使用内置数据帧汽车的示例:
cars2 <- cars[sample(1:10, 20, replace=TRUE), ] # to make some dups
table(apply(cars2,1,paste, sep=".", collapse="."))
# output #
10.18 10.26 10.34 11.17 4.10 4.2 7.22 7.4 8.16
2 3 3 3 3 1 1 2 2
答案 2 :(得分:1)
这个问题可以使用SQL解决(这里我使用sqldf包)。来自@DWin的样本数据回答。
#Occurences of rows
sqldf("SELECT speed, dist, COUNT(*) AS N FROM cars2 GROUP BY speed, dist")
#Some statistics of occurences ;)
sqldf("SELECT N,COUNT(N) AS Freq from
(SELECT COUNT(*) AS N FROM cars2 GROUP BY speed,dist)
GROUP BY N")
答案 3 :(得分:0)
countNbOccurrences = function(leX, leGroData){
return(sum(leX == leGroData))
}
sapply( theRow, countNbOccurrences, leGroData = fullListOfRows)