如何操纵R中的分层数据?

时间:2015-05-27 10:59:37

标签: r data-manipulation

我有一些表格的调查数据:

id  A_Type1   B_Type1   C_Type1  A_Type2  B_Type2  C_Type2
1     T11       T12       T11      T23     T23      T21               
2     T12       T13       T11      T21     T22      T24     
3     ... 

有些答案是NULL。 type1的答案是(T11,T12,T13,..),而type2的答案是(T21,T22,T23,..)。我想显示每个主题A,B,C的Type1和Type2之间的关系。所以,我需要表格中的数据

id   subject   Type1   Type2   
1     A         T11     T23      
1     B         T12     T23
1     C         T11     T21 
2     A         T12     T21
2     B         T13     T22
...

我如何在R?

中这样做

2 个答案:

答案 0 :(得分:3)

您可以使用data.table的开发版本,即v1.9.5。安装devel版本的说明是here

library(data.table)
melt(setDT(df1), id.var='id', measure.vars=list(2:4, 5:7))

或者

library(splitstackshape)
setnames(merged.stack(df1, var.stubs=c('_Type1', '_Type2'), sep='var.stubs',
            atStart=FALSE), 2:4, c('subject', 'Type1', 'Type2'))[]
 #    id subject  Type1  Type2
 #1:  1       A    T11    T23
 #2:  1       B    T12    T23
 #3:  1       C    T11    T21
 #4:  2       A    T12    T21
 #5:  2       B    T13    T22
 #6:  2       C    T11    T24

答案 1 :(得分:1)

您可以使用reshape

df <- read.table(header=T, text="id  A_Type1   B_Type1   C_Type1  A_Type2  B_Type2  C_Type2
1     T11       T12       T11      T23     T23      T21               
2     T12       T13       T11      T21     T22      T24")     
names(df) <- sub("([A-Z])_Type([0-9])", "Type\\2_\\1", names(df))
reshape(df, idvar = "id", varying = 2:7, direction = "long", sep = "_", timevar = "subject")
#     id subject Type1 Type2
# 1.A  1       A   T11   T23
# 2.A  2       A   T12   T21
# 1.B  1       B   T12   T23
# 2.B  2       B   T13   T22
# 1.C  1       C   T11   T21
# 2.C  2       C   T11   T24