Нахождение количества вхождений для строк - PullRequest
2 голосов
/ 07 мая 2011

В R я хотел бы найти число вхождений для уникальных строк фрейма данных максимально быстрым способом.

У меня более 2 миллионов строк, но данные умещаются на моей машине с 16 ГБ памяти. table и ftable быстрые, но количество уникальных комбинаций больше, чем они могут обработать, поэтому я получаю сообщение об ошибке.

спасибо

Steve

Ответы [ 4 ]

3 голосов
/ 09 мая 2011

Используйте count из пакета plyr.Это позволяет избежать комбинаций, которые не встречаются в данных (в отличие от таблицы и подобных).

1 голос
/ 07 мая 2011

Эта проблема может быть решена с помощью 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")
1 голос
/ 07 мая 2011

Если вопрос заключался в том, чтобы получить количество уникальных строк:

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 
0 голосов
/ 02 июля 2013
countNbOccurrences = function(leX, leGroData){
    return(sum(leX == leGroData))
}

sapply( theRow, countNbOccurrences, leGroData = fullListOfRows)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...