将行转换为列

时间:2014-04-28 06:10:36

标签: r dataframe

我有一个看起来像这样的数据框

 a    b    c   d
 ------------------
 1    1    1   0
 1    1    1   200
 1    1    1   300
 1    1    2   0
 1    1    2   600
 1    2    3   0
 1    2    3   100
 1    2    3   200
 1    3    1   0

我希望它看起来像这样。

 a    b    c   d1    d2    d3
 ------------------------------
 1    1    1   0   200   300
 1    1    2   0     600   (NA)
 1    2    3   0     100   200
 1    3    1   0 

如果该值丢失,那么填写该字段的NA就可以了,但我应该可以说该值已丢失。例如第2行和第2行。 4。

我是R的新手,我不知道如何继续。

1 个答案:

答案 0 :(得分:6)

首先应计算每个(a,b,c)组合的次数。我会用data.table执行此操作:

require(data.table)
dt <- data.table(df)
dt[, time:=paste("d", 1:.N, sep="."), by=list(a, b, c)]

然后您可以使用dcast更改为宽屏格式。

dcast.data.table(dt, a+b+c~time, value.var="d", fun=sum, fill=NA_integer_)
##    a b c d.1 d.2 d.3
## 1: 1 1 1   0 200 300
## 2: 1 1 2   0 600  NA
## 3: 1 2 3   0 100 200
## 4: 1 3 1   0  NA  NA