gpt4 book ai didi

r - `dcast` 空 RHS

转载 作者:行者123 更新时间:2023-12-05 00:59:44 26 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Transpose / reshape dataframe without "timevar" from long to wide format

(8 个回答)


4年前关闭。




有没有办法在不首先指定要翻转的变量的情况下翻转我的数据?在我看来,逻辑默认值是组内索引。

例如,

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在不同的列(和 NA s,如果有任何 id 与较少的 var 值相关联),可以这样做:
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 会更方便首先,像这样:
dcast(DT, id~ ., value.var = "var")

但这不起作用:

Aggregate function missing, defaulting to 'length'


#    id .
# 1: 6 3
# 2: 7 3
# 3: 8 3
# 4: 9 3
# 5: 10 3

是否有我可以传递的聚合函数以获得所需的效果?

最佳答案

现在可以使用 rowid功能:

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有关更多选项、示例和说明。

关于r - `dcast` 空 RHS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30314356/

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