【问题标题】:Create columns from column of list in data.table从 data.table 中的列表列创建列
【发布时间】:2013-04-15 12:49:48
【问题描述】:

我不知道如何执行以下操作,使用 data.table 从一列列表中创建动态列数

set.seed(123); N=1e5
DT = data.table(x=rnorm(N), y=sample(c('a','b','c'),N,T))
probs = seq(.1,1,.1); newCols <- paste("q",100*probs,sep="");

DT2 <- DT[ ,list(Q=list(quantile(x,probs=probs))),by=y]
DT2
#   y                                                                          Q
#1: b -1.2817037351734,-0.840293441466144,-0.525195748246148,-0.259574774974136,
#2: c -1.26975023312311,-0.832359658553173,-0.513320691339448,-0.247863323660894,
#3: a -1.28189935066568,-0.838918942382995,-0.522409189372727,-0.257356179072232,

#Here I want to create 10 columns from Q called q10, q20...
DT2[ , newCols:=Q] #can't make this work because it is evaluated in the wrong environment I guess

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    试试这个:

    DT2 <- DT[ , as.list(quantile(x,probs=probs)),by=y]
    setnames(DT2, c("y", paste0("q", seq(10, 100, by=10))))
    
    #    y       q10        q20        q30        q40          q50       q60       q70       q80
    # 1: b -1.281704 -0.8402934 -0.5251957 -0.2595748 -0.001625739 0.2526686 0.5251940 0.8379979
    # 2: c -1.269750 -0.8323597 -0.5133207 -0.2478633  0.003413041 0.2598378 0.5353759 0.8477539
    # 3: a -1.281899 -0.8389189 -0.5224092 -0.2573562  0.001186281 0.2542550 0.5244238 0.8401411
    #         q90     q100
    # 1: 1.284773 3.856234
    # 2: 1.283465 4.322815
    # 3: 1.273615 3.921410
    

    【讨论】:

    • 干得好,我找不到另一篇提到这个技巧的帖子,虽然我有印象它是香草......奇怪的是,如果我用名字创建一个 NA 的命名向量成为 newCols 然后 DT2[, names(MyNAVec):=Q] 会起作用
    • @statquant,实际上有很多最近的帖子(可能不容易找到,因为它没有明显的标题)。见thisthis
    • @statquant,请检查编辑后的解决方案。我已将其修改为 更快。以前的解决方案在很多组下效率低下(因为为每个组创建了名称)。
    • 好的,我明白了,我错过了as.list,尽管我很惊讶即使使用with=F,我们也无法在一行中完成
    • 您可以用setattr(as.list(...), 'names', &lt;names&gt;) 包裹as.list。但是效率很低。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 2015-10-22
    • 2021-12-08
    • 1970-01-01
    • 2013-06-01
    • 2015-03-09
    相关资源
    最近更新 更多