Подсчет комбинации переменных на основе уникального значения столбца - PullRequest
2 голосов
/ 13 марта 2020

для df

id=c(12,12,13,14,14,15,16,17,18,18)
reg = c('FR','FR','DE','US','US','TZ','MK','GR','ES','ES')
code1=c('F56','G76','G56','T78','G78','G76','G64','T65','G79','G56')
code2=c('G56','I89','J83','S46','D78','G56','H89','G56','W34','T89')
bin1= c(0,1,1,0,1,1,0,0,0,1)
bin2= c(1,0,1,0,0,1,1,1,0,0)
bin3= c(0,0,0,1,1,0,0,1,0,1)
df = data.frame(idnumber,reg,code1,code2, bin1, bin2, bin3)

выглядит как

id  reg code1 code2 bin1 bin2 bin3
12  FR  F56   G56    0    1    0
12  FR  G76   I89    1    0    0
13  DE  G56   J83    1    1    0
14  US  T78   S46    0    0    1
14  US  G78   D78    1    0    1
15  TZ  G76   G56    1    1    0
16  MK  G64   H89    0    1    0
17  GR  T65   G56    0    1    1
18  ES  G79   W34    0    0    0
18  ES  G56   T89    1    0    1

Я пытаюсь подсчитать число, если встречаются комбинации двоичных переменных (bin1, bin2 , bin3) значения, агрегированные по уникальным idnumber, что-то вроде:

bin1 bin2 bin3 count
  1   1    0    3
  1   0    1    2
  0   1    0    1
  0   1    0    1

любое предложение приветствуется! Приветствия

1 Ответ

2 голосов
/ 13 марта 2020

Если я вас правильно понял, вы агрегируете что-то вроде оператора ИЛИ, а затем подсчитываете уникальные значения. Так как это все 0 и 1 для начала, вы можете получить максимум каждого столбца, когда разделены идентификатором. Попробуйте ниже в dplyr:

library(dplyr)
df %>% 
select(id,bin1,bin2,bin3) %>% 
group_by(id) %>% 
summarise_all(max) %>% 
count(bin1,bin2,bin3)

# A tibble: 4 x 4
   bin1  bin2  bin3     n
  <dbl> <dbl> <dbl> <int>
1     0     1     0     1
2     0     1     1     1
3     1     0     1     2
4     1     1     0     3

Без установки dplyr, вы можете сделать это:

by_id = aggregate(df[,c("bin1","bin2","bin3")],list(id=df$id),max)
aggregate(id~bin1+bin2+bin3,by_id,length)
  bin1 bin2 bin3 id
1    0    1    0  1
2    1    1    0  3
3    1    0    1  2
4    0    1    1  1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...