【问题标题】:Create group variable over time with data.table使用 data.table 随着时间的推移创建组变量
【发布时间】:2017-02-21 14:08:57
【问题描述】:

我有一个 20 年间对大约 200 家美国公司的每日观察数据集。我想构建一个每天取值 1-10 的组变量,具体取决于例如公司的规模。我正在使用 data.table 和函数 ntile(size,10) 来创建组。

我试过了

DT[,decile:=(ntile(size,10)),by=date]

但它不起作用。 DT 是我的data.table,其中包括变量日期、大小、价格、公司ID 等

【问题讨论】:

  • 什么不完全有效?结果是不是和预期的不一样?有错误吗?
  • 你能发布一些示例数据吗?
  • 带有一些模拟数据的可重现示例会有所帮助
  • 分配 (:=) 不起作用,因为原始数据集的行数与新的 ntile 输出不同。请展示一个可重现的小示例以及基于该示例的预期输出
  • 我的意图是创建 10 个组,每个组由大约 20 家公司组成。第 1 组将是第 t 天的 20 家最小的公司,由 Size 变量衡量,第 2 组是第 t 天的 20 家第二小的公司,依此类推,然后第 10 组是第 t 天的 20 家最大的公司。

标签: r data.table


【解决方案1】:

这是一个简单的玩具示例:DT = data.table( name=c("A","A","A","A","B","B","B","B","C","C","C","C","D","D","D","D"), date=1:4, size=c(100, 101, 103, 102, 50, 51, 50 ,49, 200, 201, 202, 205, 95, 96, 98, 110) ) DT[,decile:=(ntile(size,2)),by=date]

【讨论】:

    【解决方案2】:

    使用稍微大一点的示例数据集,我可以构造一个组变量如下:

    # sample data
    DT = data.table(
      firm= rep(LETTERS, each = 20),
      date = 1:20,
      size = sample(1:250, length(LETTERS) * 20, replace = TRUE))
    
    # sort and assign group rank
    setkey(DT, date, size)
    DT[, grouprank := (1:.N) %/% 10L, by = date]
    

    这将在每个单独的日期为每个公司分配一个规模组排名,从单个日期的结果子集可以看出:

    DT[date == 1]
    
        firm date size grouprank
     1:    J    1   15         0
     2:    L    1   37         0
     3:    K    1   57         0
     4:    Q    1   64         0
     5:    R    1   64         0
     6:    C    1   81         0
     7:    E    1   86         0
     8:    I    1  106         0
     9:    O    1  117         0
    10:    B    1  118         1
    11:    X    1  119         1
    12:    A    1  135         1
    13:    H    1  138         1
    14:    D    1  140         1
    15:    F    1  162         1
    16:    N    1  171         1
    17:    M    1  178         1
    18:    S    1  178         1
    19:    T    1  181         1
    20:    G    1  188         2
    21:    Y    1  196         2
    22:    P    1  204         2
    23:    W    1  205         2
    24:    V    1  244         2
    25:    Z    1  245         2
    26:    U    1  247         2
        firm date size grouprank
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-04
      • 2018-09-10
      • 1970-01-01
      • 1970-01-01
      • 2021-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多