【问题标题】:Updating column using data.table when using global variable as column name使用全局变量作为列名时使用 data.table 更新列
【发布时间】:2020-05-22 21:10:22
【问题描述】:

我正在尝试根据列中的值是否与外部变量匹配来更新 data.table 中的列。我遇到的问题是在 data.table 语法中使用全局变量作为列名。

明确指定列名会按预期工作并更新列。

dt[,`1:4880` := ifelse(`1:4880`==allele, 2, 1)]

但是,当通过变量引用该列时,我无法更新该列:

colname="1:4880"
dt[,..colname := ifelse(..colname==allele, 2, 1)]

不是更新由变量名称描述的列中的值,而是将输出写入 df$..colname。奇怪的是,输出是正确的,所以 ifelse 函数按预期工作,它只是将输出写入错误的列名。

有没有办法让 := 运算符识别指定为变量的列名?

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    lhs 上,我们可以用() 包装来评估值,然后使用get 或在.SDcols 中指定它

    dt[, (colname) := ifelse(.SD[[1]] ==allele, 2, 1), .SDcols = colname]
    

    不清楚allele是另一列还是用某个值创建的对象

    【讨论】:

    • 您提供的解决方案有效。谢谢!澄清allele 只是设置为一个字符变量。
    猜你喜欢
    • 1970-01-01
    • 2017-10-24
    • 2016-03-30
    • 2015-08-12
    • 1970-01-01
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    相关资源
    最近更新 更多