2015-12-14 4 views
3

Мне интересно, как выполнить crosstable с использованием dplyr с данными melted. Мои данные выглядят следующим образом.R - dplyr crosstable расплавленных парных данных

  idmen sexe   dip14_rec 
1 0110008218 1    Uni 
2 0110008218 2 Primary-Secondary 
3 0110010366 1    Uni 
4 0110010366 2    Uni 
5 0110011567 1 Primary-Secondary 
6 0110011567 2 Primary-Secondary 
7 0110012163 2 Primary-Secondary 
8 0110012163 1 Primary-Secondary 
9 0110016580 2    Uni 
10 0110016580 1  No Diploma 

То, что я хочу, это кросс-таблица dipl14_rec по idmen.

Единственный способ я нашел это это

dta1 = dta %>% filter(sexe == 1) 
dta2 = dta %>% filter(sexe == 2) 

dta12 = merge(dta1, dta2, by = 'idmen') 
table(Men = dta12$dip14_rec.x, Women = dta12$dip14_rec.y) 

Который дает мне выход я хочу:

#     Women 
# Men     No Diploma Primary-Secondary Uni 
# No Diploma     0     0 1 
# Primary-Secondary   0     2 0 
# Uni      0     1 1 

есть более прямой способ сделать это с помощью dplyr synthax?

Благодаря

dta = structure(c("0110008218", "0110008218", "0110010366", "0110010366", 
"0110011567", "0110011567", "0110012163", "0110012163", "0110016580", 
"0110016580", "1", "2", "1", "2", "1", "2", "2", "1", "2", "1", 
"Uni", "Primary-Secondary", "Uni", "Uni", "Primary-Secondary", 
"Primary-Secondary", "Primary-Secondary", "Primary-Secondary", 
"Uni", "No Diploma"), .Dim = c(10L, 3L), .Dimnames = list(NULL, 
c("idmen", "sexe", "dip14_rec"))) 
+0

у вас есть 'matrix'? –

+0

Да, мой dput не работал для корреляции на df. не знаю почему – giacomo

ответ

6

Вы могли бы просто spread данные и Запускаем table функции при задании dnn

library(dplyr) 
library(tidyr) 
dta %>% 
    spread(sexe, dip14_rec) %>% 
    select(-idmen) %>% 
    table(., dnn = c("Men", "Women")) 
#     Women 
# Men     No Diploma Primary-Secondary Uni 
# No Diploma     0     0 1 
# Primary-Secondary   0     2 0 
# Uni      0     1 1 

или сходным с data.table

library(data.table) # V 1.9.6+ 
dcast(setDT(dta), idmen ~ sexe)[, table(Men = `1`, Women = `2`)] 
# Using 'dip14_rec' as value column. Use 'value.var' to override 
#     Women 
# Men     No Diploma Primary-Secondary Uni 
# No Diploma     0     0 1 
# Primary-Secondary   0     2 0 
# Uni      0     1 1 

данных

dta <- structure(list(idmen = c(110008218L, 110008218L, 110010366L, 
110010366L, 110011567L, 110011567L, 110012163L, 110012163L, 110016580L, 
110016580L), sexe = c(1L, 2L, 1L, 2L, 1L, 2L, 2L, 1L, 2L, 1L), 
    dip14_rec = structure(c(3L, 2L, 3L, 3L, 2L, 2L, 2L, 2L, 3L, 
    1L), .Label = c("No Diploma", "Primary-Secondary", "Uni"), class = "factor")), .Names = c("idmen", 
"sexe", "dip14_rec"), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6", "7", "8", "9", "10")) 
+0

приятно очень круто спасибо – giacomo

+0

Смотрите мое редактирование с 'dnn', чтобы точно соответствовать вашему желаемому результату. –

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