将行转换为列

use*_*429 1 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
Run Code Online (Sandbox Code Playgroud)

我希望它看起来像这样.

 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 
Run Code Online (Sandbox Code Playgroud)

如果该值丢失,则填写该字段的NA很好,但我应该可以说该值已丢失.例如第2和第4行.

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

sha*_*dow 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)]
Run Code Online (Sandbox Code Playgroud)

然后您可以使用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
Run Code Online (Sandbox Code Playgroud)