【问题标题】:Combine columns A, B element by element into list-column of ranges from the elements of A and B将 A、B 列逐个元素组合到 A 和 B 元素的范围列表列中
【发布时间】:2021-02-18 20:19:03
【问题描述】:

我正在尝试编写 R 代码,最好是 data.table,以根据列 A 和 B 中的信息生成最后一列 (my_wanted_col)

library(data.table)
d <- data.table(A=c(1,2,3),
                B=c(5,6,7),
                my_wanted_col=list(1:5,2:6,3:7)
                )

也就是说,创建一个范围列表的列。在每一行中,通过将 A 中的单元格与 B 中的单元格组合来创建范围 (cellA:cellB)。 实际数据有数百万个观察值,但上面的例子重现了这个问题。

【问题讨论】:

    标签: r list data.table range


    【解决方案1】:

    一种选择是使用by 作为行序列,然后只执行从 A 到 B 的序列

    d[,   my_wanted_col := .(list(A:B)), by = 1:nrow(d)]
    d
    #   A B my_wanted_col
    #1: 1 5     1,2,3,4,5
    #2: 2 6     2,3,4,5,6
    #3: 3 7     3,4,5,6,7
    

    数据

    d <- data.table(A = c(1,2,3), B = c(5,6, 7))
    

    【讨论】:

    • tks。但是这次您提出的解决方案要慢得多。对于上述@Ronak_Shah 的解决方案,这需要 900 秒和 30 秒。
    • @LucasMation 我认为分组会减慢速度
    【解决方案2】:

    你可以使用

    library(data.table)
    d[, my_wanted_col := Map(`:`, A, B)]
    d
    
    #   A B my_wanted_col
    #1: 1 5     1,2,3,4,5
    #2: 2 6     2,3,4,5,6
    #3: 3 7     3,4,5,6,7
    

    数据

    d <- data.table(A=c(1,2,3),B=c(5,6, 7))
    

    【讨论】:

      猜你喜欢
      • 2019-07-29
      • 1970-01-01
      • 1970-01-01
      • 2022-08-19
      • 1970-01-01
      • 2021-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多