R部分重塑数据从长到宽

时间:2016-06-13 23:28:42

标签: r reshape

我喜欢将数据集从长到大重塑。具体而言,新的宽数据集应包含与长数据集中唯一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

2 个答案:

答案 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