繁体   English   中英

data.table 扩展每行不止一个观察的解决方案不起作用

[英]data.table expand solution for more than one observation per row not working

我试图解决在此探讨这个问题的问题,并一直持续到这一个

我有一个包含 32,285 个观察值的dataframe框,其中包含变量yearepiweekcount 数据框不是“平坦的”,因为在许多情况下计数列多于 1,即,多于一个观察被集中到多行中。 我已经完成了两个页面的所有解决方案,但总是收到错误:无效的“时间”参数。

第二页上的解决方案(“扩展 data.table 时出现奇怪的错误”)似乎是对最佳方法的共识,他们似乎已经解决了这个问题,所以我创建了一个小的 reprex,但 reprex 有效,没有错误:

    year1 <- c('2010', '2011', '2010', '2012', '2010')
    epiweek1 <- c(1, 1, 2, 2, 3)
    count1 <- c(1, 5, 38, 13, 1)
    mydt1 <- data.table(year1, epiweek1, count1)
    newdt1 <- mydt1[ ,.(rep(rep(1,.N),count1)), by=.(year1,epiweek1)]

大 df 由 Epiweeks 订购。 所有年份的 Epiweek 1 中的所有观察,然后是所有年份的 Epiweek 2 中的所有年份等。第一个 reprex 与 df 中的序列一致,如下所示:

    year2 <- c('2010', '2011', '2011', '2012', '2013')
    epiweek2 <- c(1, 1, 2, 2, 3)
    count2 <- c(1, 5, 38, 13, 1)
    mydt2 <- data.table(year2, epiweek2, count2)
    newdt2 <- mydt2[ ,.(rep(rep(1,.N),count2)), by=.(year2,epiweek2)]

Reprex 3 是 reprex 1,其中一个 Epiweeks 失序。 它使用 dt 方法扩展数据表给出错误:

    year3 <- c('2010', '2011', '2010', '2012', '2010')
    epiweek3 <- c(1, 2, 1, 2, 3)
    count3 <- c(1, 5, 38, 13, 1)
    newdt3 <- mydt1[ ,.(rep(rep(1,.N),count3)), by=.(year3,epiweek3)]#Error in rep(rep(1, .N), 
    count3) : invalid 'times' argument

如果我在 reprex 2 中使用 count1,我也会得到错误。计数彼此相等,所以不确定为什么会发生这种情况。

    count1 == count2, count1 == count3

这三个都与@vonjd在第二页最后一条评论中的一段制表代码一致:

    mydt1[,.N,by=.(year1,epiweek1)][,table(N)]
    mydt2[,.N,by=.(year2,epiweek2)][,table(N)]
    mydt3[,.N,by=.(year3,epiweek3)][,table(N)]

因此,我的大 df 似乎结构类似于 reprex 1 和 2,它们扩展了表格并且不给出错误。 一个计数行中的最大值是 166。所以,我很困惑为什么扩展 data.table 方法不适用于我的大数据框。 是的,我确实先转换为数据表。

使用 R 版本 3.6.1

这正是我所需要的:

dt.0742long <- dt.0742[ , 
  .(tryCatch(rep(rep(1,.N),count), error=browser)), by=.(year,epiwk)]

V1被计数

> glimpse(dt.0742long)
Observations: 113,898 Variables: 3 $ year  <dbl> 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 201… $ epiwk <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, … $ V1    <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, … >


> glimpse(dt.0742)
Observations: 32,285
Variables: 4
$ year          <dbl> 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010,…
$ epiwk         <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
$ count         <dbl> 1, 2, 2, 1, 1, 15, 14, 12, 15, 8, 4, 5, 11, 7, 3, 4, 2, 1, 2, 4, 1, 1, 1, 2, …
$ Case_Category <dbl> 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM