我有一些表格的调查数据:
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?
中这样做答案 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