首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带空RHS的‘`dcast`’

带空RHS的‘`dcast`’
EN

Stack Overflow用户
提问于 2015-05-18 23:26:45
回答 2查看 365关注 0票数 6

是否有任何方法可以在不指定要翻转的变量的情况下翻转我的数据?在我看来,逻辑默认值似乎是组内索引。

例如,

代码语言:javascript
复制
DT <- data.table(id = rep(6:10, each = 3), var = rnorm(15))
DT
#     id         var
#  1:  6  1.58293930
#  2:  6  0.44234019
#  3:  6 -0.06576521
#  4:  7 -0.65124980
#  5:  7  0.88371933
#  6:  7 -1.94998135
#  7:  8 -1.95746466
#  8:  8 -0.50978195
#  9:  8 -0.40450447
# 10:  9 -0.61097399
# 11:  9 -0.92335213
# 12:  9 -0.19881983
# 13: 10  0.13022635
# 14: 10 -0.30141200
# 15: 10  0.78355188

我想要的基本上是,对于每个id,在不同的列中var的每个值(如果有任何与var值关联较少的id,则为NA),可以这样做:

代码语言:javascript
复制
DT[ , I := 1:.N, by = id]
dcast(DT, id ~ I, value.var = "var")
#    id          1          2           3
# 1:  6  1.5829393  0.4423402 -0.06576521
# 2:  7 -0.6512498  0.8837193 -1.94998135
# 3:  8 -1.9574647 -0.5097820 -0.40450447
# 4:  9 -0.6109740 -0.9233521 -0.19881983
# 5: 10  0.1302263 -0.3014120  0.78355188

但是,如果我不必先定义I就更方便了,如下所示:

代码语言:javascript
复制
dcast(DT, id~ ., value.var = "var")

但这不管用:

缺少聚合函数,默认为“长度”

代码语言:javascript
复制
#    id .
# 1:  6 3
# 2:  7 3
# 3:  8 3
# 4:  9 3
# 5: 10 3

是否有一个聚合函数,我可以通过它来达到预期的效果?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-24 14:29:38

现在可以使用rowid函数:

代码语言:javascript
复制
dcast(DT, id ~ rowid(id), value.var = "var")
#    id          1          2          3
# 1:  6  1.1050942  0.1271620  1.3051373
# 2:  7 -0.5441056 -0.6866828 -0.8083762
# 3:  8 -0.6812820 -1.1934716 -1.3913903
# 4:  9 -0.3462497 -0.8229276 -1.0884394
# 5: 10 -0.4600681  0.6173795 -1.0125658

有关更多选项、示例和解释,请参见?rowid

票数 4
EN

Stack Overflow用户

发布于 2015-05-20 01:27:26

如果您的表已满,则可以使用以下技术:

代码语言:javascript
复制
dt<-data.table(id=rep(6:10,each=3), var=rnorm(15))
dt[, as.list(setNames(var, 1:length(var))), id]
#    id       1       2        3
# 1:  6 -1.6187  0.9227 -0.12284
# 2:  7  0.9898  0.3489  1.21193
# 3:  8 -1.5968  1.3802  0.09284
# 4:  9 -1.9527 -0.6347  1.11014
# 5: 10  0.6093 -1.0609 -0.66372

几天前,在一个data.table问题上使用了这个技巧。如果有人跟踪该提要并能够回忆起该帖子,请随时编辑。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30314356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档