我喜欢将数据集从长到大重塑。具体而言,新的宽数据集应包含与长数据集中唯一ID数相对应的行,并且列数是另一个变量的唯一值的倍数。
假设这是原始数据集:
ID a b C d e f g
1 1 1 1 1 2 3 4
1 1 1 2 5 6 7 8
2 2 2 1 1 2 3 4
2 2 2 3 9 0 1 2
2 2 2 2 5 6 7 8
3 3 3 3 9 0 1 2
3 3 3 2 5 6 7 8
3 3 3 1 1 2 3 4
在新数据集中,行数是ID的数量,列数是3加上变量C
中找到的唯一元素的倍数以及变量d
到{的值在按升序排序变量g
之后填充{1}}。看起来应该是这样的:
C
答案 0 :(得分:3)
您可以使用dcast
中的data.table
:
data.table::setDT(df)
data.table::dcast(df, ID + a + b ~ C, sep = "", value.var = c("d", "e", "f", "g"), fill=NA)
ID a b d1 d2 d3 e1 e2 e3 f1 f2 f3 g1 g2 g3
1: 1 1 1 1 5 NA 2 6 NA 3 7 NA 4 8 NA
2: 2 2 2 1 5 9 2 6 0 3 7 1 4 8 2
3: 3 3 3 1 5 9 2 6 0 3 7 1 4 8 2
答案 1 :(得分:3)
基本reshape
版本 - 只需使用C
作为您的时间变量即可离开。
reshape(dat, idvar=c("ID","a","b"), direction="wide", timevar="C", sep="")
# ID a b d1 e1 f1 g1 d2 e2 f2 g2 d3 e3 f3 g3
#1 1 1 1 1 2 3 4 5 6 7 8 NA NA NA NA
#3 2 2 2 1 2 3 4 5 6 7 8 9 0 1 2
#6 3 3 3 1 2 3 4 5 6 7 8 9 0 1 2