【问题标题】:R Data Table add rows to each group if not existingR数据表如果不存在则向每个组添加行
【发布时间】:2023-01-20 19:30:00
【问题描述】:

我有一个包含多个组的数据表。我想用包含 vals 中的值的行填充每个组(如果它们不存在的话)。额外的列应该用 NA 填充。

DT = data.table(group = c(1,1,1,2,2,3,3,3,3), val = c(1,2,4,2,3,1,2,3,4), somethingElse = rep(1,9)) 
vals = data.table(val = c(1,2,3,4))

我想要的是:

    group val somethingElse
 1:     1   1             1
 2:     1   2             1
 3:     1   3            NA
 4:     1   4             1
 5:     2   1            NA
 6:     2   2             1
 7:     2   3             1
 8:     2   4            NA
 9:     3   1             1
10:     3   2             1
11:     3   3             1
12:     3   4             1

val的顺序不一定要递增,值也可以附加在每组的开头/结尾。

我不知道如何解决这个问题。我考虑过使用rbindlist(...,fill = TRUE),但随后将简单地附加值。 我认为带有 DT[, lapply(...), by = c("group")] 的一些表达式在这里可能会有用,但我不知道如何检查一个值是否已经存在。

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    您可以使用交叉连接:

    setDT(DT)[
      CJ(group = group, val = val, unique = TRUE), 
      on = .(group, val)
    ]
    
        group val somethingElse
     1:     1   1             1
     2:     1   2             1
     3:     1   3            NA
     4:     1   4             1
     5:     2   1            NA
     6:     2   2             1
     7:     2   3             1
     8:     2   4            NA
     9:     3   1             1
    10:     3   2             1
    11:     3   3             1
    12:     3   4             1
    

    【讨论】:

      猜你喜欢
      • 2016-10-16
      • 1970-01-01
      • 1970-01-01
      • 2020-11-03
      • 2021-12-10
      • 1970-01-01
      • 1970-01-01
      • 2021-09-30
      • 1970-01-01
      相关资源
      最近更新 更多