【问题标题】:Create class column in data.table given a numeric vector给定数字向量,在 data.table 中创建类列
【发布时间】:2020-09-19 22:58:50
【问题描述】:

目前我有一个这样的data.table:

item    dummyvar  
4q7C0o     1         
2BrKY63    1         
3drUy6I    1         
G5ALtO    1000        
G5G859    1000
PAP589    2000

使用定义的函数,我发现dummyvar 发生显着变化的行位于名为imbalance = 4 6 的数字向量中。我想做的是在我的数据表中创建一个新列,以便imbalance 给出的给定数字下方的所有行都在给定的类中,例如。像这样:

item    dummyvar   Class
4q7C0o     1         1
2BrKY63    1         1
3drUy6I    1         1
G5ALtO    1000       2 
G5G859    1000       2
PAP589    2000       3

【问题讨论】:

  • 好的,我给出了一个答案,意识到我不明白你的imbalance-part。你能更精确一点吗?我只是计算了这些组,但不知道您要做什么。
  • 也许是your_data_table[, Class := cumsum(.I %in% imbalance)]?我假设imbalance 是您希望Class 增加的行号的向量。 (此版本从 0 开始,但您可以在其上粘贴 + 1 以从 1 开始)
  • @Oliver 啊,我明白了。我因为跑题而删除了我的答案。
  • @MartinGal 相反,感谢您抽出宝贵时间评论和检查我的问题。我很感激

标签: r data.table grouping


【解决方案1】:

也许是your_data_table[, Class := cumsum(.I %in% imbalance)]?我假设不平衡是您希望 Class 增加的行号的向量。 (这个版本从 0 开始,但你可以在上面加上 + 1 以从 1 开始)

【讨论】:

    【解决方案2】:

    如果我理解正确,向量 imbalance 包含新的 Class 应该开始的 data.table 中的行索引。

    这是在行索引.I 上使用cut() 的一种可能的解决方案(我想还有许多其他解决方案):

    dt[, Class := cut(.I, c(0, imbalance, Inf), labels = FALSE, right = FALSE)][]
    
          item dummyvar Class
    1:  4q7C0o        1     1
    2: 2BrKY63        1     1
    3: 3drUy6I        1     1
    4:  G5ALtO     1000     2
    5:  G5G859     1000     2
    6:  PAP589     2000     3
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-11
      • 2020-05-04
      • 2021-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-13
      相关资源
      最近更新 更多