在R中,我想以儘可能最快的方式找到數據幀唯一行的出現次數。查找行的出現次數
我有超過200萬行,但數據適合我的16GB內存機器 表和ftable速度快,但唯一組合的數量超過他們可以處理,因此我收到一條錯誤消息。
感謝
史蒂夫
在R中,我想以儘可能最快的方式找到數據幀唯一行的出現次數。查找行的出現次數
我有超過200萬行,但數據適合我的16GB內存機器 表和ftable速度快,但唯一組合的數量超過他們可以處理,因此我收到一條錯誤消息。
感謝
史蒂夫
如果問題是得到的唯一的行數:
sum(!duplicated(dfrm))
如果問題是,以獲得獨特的線本身:
dfrm[!duplicated(dfrm), ]
如果你想要一個獨特的組合表,然後考慮這個例子與inbu ilt dataframe cars:
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
這個問題可以使用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")
使用plyr
包中的count
。它避免了數據中不存在的組合(與表格等相反)。
尼克,我不知道這我會看看plyr包。 – 2011-05-09 14:20:49
確實很快。當然,R在內存中工作,如果所有的數據都可以在內存中,這是一個不錯的選擇。 – 2011-05-09 21:17:45
countNbOccurrences = function(leX, leGroData){
return(sum(leX == leGroData))
}
sapply(theRow, countNbOccurrences, leGroData = fullListOfRows)
我不認爲這會帶來頻率。這帶來了唯一行的總數。 – 2011-05-07 04:06:55
我認爲你需要更清楚地寫下你的問題 - 很難理解你要求的內容。 – wch 2011-05-07 05:31:33
wch:這怎麼能更清楚?我寫道:「我希望以最快的方式找到數據幀唯一行的出現次數。」 – 2011-05-07 12:54:47