【问题标题】:how to replace values in data table based on another table如何根据另一个表替换数据表中的值
【发布时间】:2021-02-10 18:28:04
【问题描述】:

我有一个名为growthcheck 的包含83 列的data.table。 向量flag4issues 包含growthcheck 的21 个列名的子集。 flag4issues 是一个字符向量。

test 是另一个维度为 3 乘 21 的向量。我正在调试该行的代码

growthcheck[1:3, flag4issues] <- test 

抛出错误。

我尝试将 test 转换为 data.table,执行循环,但没有任何效果。有什么想法吗?

dput(growthcheck[1:5,flag4issues])testflag4issues可以检索到here

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    data.table 语法是在i (1:3) 中指定行索引,将 data.frame ('test') 分配给指定的列。由于'growthcheck'的列是numeric class,'test'的列是charactermatrix),在做作业之前需要转换类

    library(data.table)
    growthcheck <- growthcheck[, lapply(.SD, as.character)]
    growthcheck[1:3, (flag4issues) := as.data.frame(test)]
    

    -输出

    growthcheck[1:3, 1:2]
       Country
    1: Austria
    2: Austria
    3: Belgium
                                                                                                                   Obs
    1:  3.A.4.3 - Population (POP, Deer): Irregularities in the time series have been been identified. Years flagged: 
    2:  3.A.4.3 - Population (POP, Deer): Irregularities in the time series have been been identified. Years flagged: 
    3: 3.A.4.4 - Population (POP, Goats): Irregularities in the time series have been been identified. Years flagged: 
    

    【讨论】:

    • 非常感谢...我在 data.table 上还有很多东西要学
    • 我太乐观了...我一直收到错误消息:Error in `[.data.table`(growthcheck, 1:3, `:=`((flag4issues), as.data.frame(test))) : Supplied 21 columns to be assigned 3 items. Please see NEWS for v1.12.2. 还有什么建议吗?
    • @efz 它是否基于相同的 dput,因为我无法重现该错误。 test 转换为 data.frame 时为 3 x 21,而 flag4issues 是 21 个元素的向量
    • 好吧,growcheck 有更多的列,其余的都是一样的
    • 感谢您的坚持,您的第一个解决方案确实有效。我错过了将test 从列表转换为矩阵的代码的Reduce 部分。再次感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-27
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 2021-07-13
    • 2021-07-17
    • 2016-06-14
    相关资源
    最近更新 更多