2015-11-09 2 views
1

Я пытаюсь использовать функцию count из библиотеки plyr в R, чтобы рассчитать частоту конкретных комбинаций чисел, которые появились.Частота подсчета с использованием plyr

Например, я хочу точно знать, как часто число 1 и 2 появляются вместе.

N1 N2 N3 
1 1 2 5 
2 2 1 4  
3 2 4 3 
4 3 1 2  
5 2 3 1 
6 3 1 4 

Таким образом, для dataframe, как один из приведенных выше, я должен был объединить столбцы 1 и 2, столбец 1 и 3, колонка 2 и 3, и объединить все из них. Затем я делаю «счет» для объединенных данных.

combined1_2 = cbind(df$N1,df$N2) 
combined1_3 = cbind(df$N1,df$N3) 
combined2_3 = cbind(df$N2,df$N3) 

combined_all = rbind(freq1_2,freq1_3,freq2_3) 
combined_freq = count(combined_all) 

Поэтому, когда я проверяю частотную таблицу, я получил следующий результат (показан только частичный результат).

x1 x2 Freq 
1 1 2  2 
2 2 1  2 

Проблема в том, что функция count обработала число «1 и 2», отличное от «2 и 1». Поэтому мне было интересно, есть ли какая-нибудь функция в R, которая может решить эту проблему и создать правильный результат, как показано ниже.

x1 x2 Freq 
1 1 2  4 

ответ

1

вы можете просто посчитать раз цифры вместе в ряд:

sum(apply(df, 1, function(x){all(c(1, 2) %in% x)})) 
#[1] 4 
+0

Спасибо за решение! Это экономит процесс объединения каждого столбца. Мне было интересно, есть ли простой способ записать все комбинации между любыми двумя числами среди 1 и 40. Или использует цикл единственное решение для замены части c (1, 2) на c (i, i + n) ? – 1stclassmelon

+0

@ 1stclassmelon приветствую :-). Может быть, с 'combn' для вашего второго вопроса? – Cath

3

Вы также можете векторизации это, если не слишком много номеров, чтобы проверить, просто проверить, если df равно каждый от числа

sum((rowSums(df == 1) > 0) & (rowSums(df == 2) > 0)) 
## [1] 4 
+0

Спасибо за помощь. Это действительно упрощает процесс. Дополнительный вопрос: для больших данных, я думаю, мне придется использовать цикл, если я хочу найти комбинационную частоту среди, например, 40 разных чисел? – 1stclassmelon

+1

Если у вас 40 различных чисел, используйте метод Caths, это будет проще –

Смежные вопросы