R: Подсчет кортежей в Dataframe - PullRequest
0 голосов
/ 25 июня 2018

Надеюсь, название широкое, но достаточно ясное. Любой намек, помощь очень ценится.

У меня есть Dataframe в R, заданный тремя столбцами и около 70 тыс. Строк. Я должен сделать следующее:

Предполагая, что я идентифицирую первые два столбца строки с кортежем (x, y) и столбцом z как «ключ», который связан с кортежем (x, y), я хочу посчитать, как часто данный кортеж (x, y) связан с z - тогда как (x, y) может быть связан с более чем одним ключом z. Итак, хотя это первый шаг при анализе карты (x, y) -> z, я думаю, было бы удобно иметь фрейм данных, показывающий, как часто (x, y) ассоциируется с z.

Например:

Адам, Германия, Бухгалтерия

Берт, Австрия, Операции

Берт, Германия, HR

Адам, Германия, HR

И я бы хотел увидеть:

HR -> Bert, Германия; Адам, Германия

Операции -> Берт, Австрия

Бухгалтерия -> Адам, Германия

Ответы [ 2 ]

0 голосов
/ 25 июня 2018
dt <- data.frame(name = c("Adam", "Bert","Bert", "Adam"),   
+ cntry = c("Germany",  "Austria","Germany","Germany"),  
+ occ = c("Accounting","Operations","HR", "HR"))  
dt$tuple<-paste(dt$name,",",dt$cntry,sep="")  
dt$tuple1<-dt$tuple  
dt<-reshape(dt[,3:5],idvar="occ",timevar="tuple1",direction="wide")  
dt[is.na(dt)]<-""  
dt<-data.frame(occ=dt[,1],tuples=apply(dt[,-1],1,paste,collapse="|"))  
dt$tuples<-gsub("\\|+","|",dt$tuples)  
dt  

выход

  occ                    tuples  
1 Accounting             Adam,Germany|  
2 Operations            |Bert,Austria|  
3 HR               Adam,Germany|Bert,Germany  
0 голосов
/ 25 июня 2018

Хорошо, как насчет этого?

require(data.table)

# your data
dt1 <- data.table(name = c("Adam", "Bert","Bert", "Adam"),
                 cntry = c("Germany",  "Austria","Germany","Germany"),
                 occ = c("Accounting","Operations","HR", "HR"))


# make table
dt2 <- dcast(dt1, cntry + name ~ occ,value.var = "occ", fun.aggregate = length)

# make grand total
dt2[ , Total := rowSums(.SD), .SDcols = colnames(dt2)[-(1:2)]  ]


# output
     cntry name Accounting HR Operations Total
1: Austria Bert          0  0          1     1
2: Germany Adam          1  1          0     2
3: Germany Bert          0  1          0     1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...