【问题标题】:set() in data.table - matching on names instead of column numberdata.table 中的 set() - 匹配名称而不是列号
【发布时间】:2016-08-17 09:04:26
【问题描述】:

使用 set() 来更新 data.table 中的值以提高效率,当列的顺序发生变化时,我遇到了问题。因此,为了防止我使用了一种解决方法来匹配列名而不是列位置。 我想知道是否有更好的方法来处理集合查询的 j 部分中的列。

DT <- as.data.table(cbind( Period = 1:10, 
                                 Col.Name=NA))

set(DT, i = 1L , j = as.integer(match("Col.Name",names(DT))), value = 0)
set(DT, i = 3L , j = 2L, value = 0)

所以我想问一下是否有针对此问题的 data.table 解决方法,也许是对已经可用的 colnames 的快速匹配。

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    我们可以直接在'j'中使用列名

    set(DT, i = 1L , j = "Col.Name", value = 0)
    DT
    #    Period Col.Name
    # 1:      1        0
    # 2:      2       NA
    # 3:      3       NA
    # 4:      4       NA
    # 5:      5       NA
    # 6:      6       NA
    # 7:      7       NA
    # 8:      8       NA
    # 9:      9       NA
    #10:     10       NA
    

    【讨论】:

    • 虽然这两种方式之间的差异在快速的微基准测试() 中并不明显。可能是因为在内部它们几乎相同,当然代码的可读性大大增强了。
    猜你喜欢
    • 2018-01-06
    • 2019-01-22
    • 1970-01-01
    • 2011-12-06
    • 2016-02-02
    • 1970-01-01
    • 1970-01-01
    • 2013-07-11
    • 1970-01-01
    相关资源
    最近更新 更多