2017-01-25 5 views
1

Я следующие примеры набора данных:Объединить записи в кадр данных в R

data.frame(SEX=c("M","F","M","F"),COMPLAINT=c("headache","headache", "dizziness", "dizziness"), 
      reports=c(5,4,9,12), users = c(1250,3460,2500,1850)) 

    SEX COMPLAINT reports users 
1 M headache  5 1250 
2 F headache  4 3460 
3 M dizziness  9 2500 
4 F dizziness  12 1850 

Мой вопрос заключается в том, чтобы объединить строки 1 и 2, и 3 и 4, так что мой кадр данных выглядит следующим образом:

COMPLAINT reports_male reports_female users_male users_female 
1 headache   5    4  1250   3460 
2 dizziness   9    12  2500   1850 

Кто-нибудь получил быстрое решение, которое я могу использовать для (большего) набора данных?

ответ

3

Мы можем использовать dcast из data.table, который может занять несколько value.var колонн и достаточно эффективен на больших наборах данных

library(data.table) 
dcast(setDT(df1), COMPLAINT ~ SEX, value.var = c("reports", "users")) 
# COMPLAINT reports_F reports_M users_F users_M 
#1: dizziness  12   9 1850 2500 
#2: headache   4   5 3460 1250 
2

Как видно из How to reshape data from long to wide format?, мы можем использовать library(reshape2), а затем

reshape(df, idvar = "COMPLAINT", timevar = "SEX", direction = "wide").

COMPLAINT reports.M users.M reports.F users.F 
1 headache   5 1250   4 3460 
3 dizziness   9 2500  12 1850