如何在不执行data.table
或sum
等功能的情况下重新塑造mean
(长到宽)?
我正在看dcast / melt / reshape /等。
但我没有得到预期的结果。
这是我的数据:
DT <- data.table(id = c("1","1","2","3"), score = c("5", "4", "5", "6"))
原始格式:
> DT
id score
1 5
1 4
2 5
3 6
所需格式:
id score1 score2
1 5 4
2 5 NA
3 6 NA
我现在用诀窍来做:
DT <- DT[, list(list(score)), by=id]
但是第一个单元格的内容就像:
c("5", "4")
我需要拆分它(我使用包splitstackshape
):
DT <- cSplit(DT, "V1", ",")
这可能不是最有效的方法...... 什么是更好的方式?
答案 0 :(得分:4)
您可以使用getanID
为分组变量.id
创建唯一的id
。然后,尝试使用dcast.data.table
(或只是版本1.9.5及更高版本中的dcast
),如果需要,请使用setnames
library(splitstackshape)
res <- dcast(getanID(DT, 'id'), id~.id,value.var='score')
setnames(res, 2:3, paste0('score', 1:2))[]
# id score1 score2
#1: 1 5 4
#2: 2 5 NA
#3: 3 6 NA
或仅使用data.table
dcast(DT[, .id:=paste0('score', 1:.N), by=id],
id~.id, value.var='score')
# id score1 score2
#1: 1 5 4
#2: 2 5 NA
#3: 3 6 NA
或者您使用的代码(字符数较少)
cSplit(DT[, toString(score), by=id], 'V1', ',')
# id V1_1 V1_2
#1: 1 5 4
#2: 2 5 NA
#3: 3 6 NA