【问题标题】:dcast long to wide by transforming unique RHS通过转换独特的 RHS 进行从长到宽的 dcast
【发布时间】:2015-02-24 20:56:54
【问题描述】:

假设我有一个如下表:

DT <- data.table(ID1= rep(c("a","b","c"),3),ID2=rnorm(9,4),var = 1:9)

## > DT
##    ID1      ID2 var
## 1:   a 2.630392   1
## 2:   b 3.966620   2
## 3:   c 4.002776   3
## 4:   a 3.188372   4
## 5:   b 4.735084   5
## 6:   c 4.307198   6
## 7:   a 2.830868   7
## 8:   b 4.892684   8
## 9:   c 3.429826   9

我想通过仅考虑每个 ID1 出现的次数来执行 dcast。

不需要的输出:

dcast(DT,ID1~ID2)

想要的输出:

##    ID1 1 2 3
## 1:   a 1 4 7
## 2:   b 2 5 8
## 3:   c 3 6 9

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    试试

    dcast.data.table(DT[,N:=1:.N ,ID1], ID1~N, value.var='var')
    #   ID1 1 2 3
    #1:   a 1 4 7
    #2:   b 2 5 8
    #3:   c 3 6 9
    

    【讨论】:

    • 我在想这样的事情。但不知道 .N 。它在文档中逃脱了我。谢谢
    • @DJJ 这个想法是创建一个序列列。另一种选择是library(splitstackshape); dcast.data.table(getanID(DT, 'ID1'), ID1~.id, value.var='var')
    • 我更喜欢 data.table 选项,但第二个选项在其他情况下也很方便。非常感谢你。
    • @DJJ 没问题。很高兴为您提供帮助
    • @DJJ, getanID 本质上与“data.table 选项”相同:-)
    猜你喜欢
    • 2019-11-11
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 2017-01-15
    • 1970-01-01
    • 2017-07-31
    • 2016-10-18
    • 2021-01-14
    相关资源
    最近更新 更多