gpt4 book ai didi

r - 如何在不执行 sum 或 mean 之类的函数的情况下 reshape data.table(从长到宽)?

转载 作者:行者123 更新时间:2023-12-01 12:38:27 27 4
gpt4 key购买 nike

如何在不执行 summean 之类的函数的情况下 reshape data.table(从长到宽)?我在看 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", ",")

这可能不是最有效的方法...什么是更好的方法?

最佳答案

您可以使用 getanID 为分组变量 id 创建一个唯一的 .id。然后,尝试使用 dcast.data.table(或者只是 dcast 从版本 1.9.5 及更高版本),如果需要,使用 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

关于r - 如何在不执行 sum 或 mean 之类的函数的情况下 reshape data.table(从长到宽)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27346628/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com