Частота комбинированных факторов и их обратная - PullRequest
0 голосов
/ 04 мая 2018

Я бы хотел посчитать частоту пар.

Фрейм данных имеет 2 столбца с несколькими факторами, например:

    df
     A1 A2  
     1 "A" "A"
     2 "D" "C"
     3 "B" "A"
     4 "D" "C"
     5 "D" "C"
     6 "A" "B"
     7 "B" "A"
     8 "C" "D"

Мой фрейм данных содержит сотни строк и 20 переменных.

Я пробовал с помощью функции подсчета из plyr:

    count(df, c("A1", "A2"))
     A1 A2 freq
     1    A  A    1
     2    A  B    1
     3    B  A    2
     4    C  D    1
     5    D  C    3

Но моя цель - получить результат, который выглядит следующим образом:

     A1 A2 freq
     1    A  A    1
     2    A  B    3
     3    C  D    4

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Частично аналогично решению h3rm4n, но только R base:

mat <- as.data.frame(t(apply(df, MARGIN=1, sort)))
mat$freq <- 1
aggregate( freq ~ V1 + V2, data=mat, length)

  V1 V2 freq
1  A  A    1
2  A  B    3
3  C  D    4
  • отсортируйте каждую строку с помощью apply(df, MARGIN=1, sort), а затем транспонируйте полученную матрицу и преобразуйте ее в data.frame
  • agggregate() для группировки по двум столбцам и получения lenght каждой группы
0 голосов
/ 04 мая 2018

Вы можете сделать это:

library(dplyr)
t(apply(df, 1, sort)) %>% 
  as.data.frame %>% 
  count(A1 = V1, A2 = V2)

Результат:

# A tibble: 3 x 3
  A1    A2        n
  <fct> <fct> <int>
1 A     A         1
2 A     B         3
3 C     D         4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...