r-如何通过部分字符串匹配来选择data.table列,并通过常数乘法来更新它们



我有一个大的data.table,它有几个列,其中一些包含以立方英尺为单位的值。这些由添加的"_cft";在列名的末尾。我想将这些列的值转换为m³b乘以一个常数,然后返回更新后的值。我已经可以选择列并将其相乘,但无法替换现有值。

我的代码如下:

dt <- dt[, lapply(.SD, function(x) x * 0.0283168), .SDcols= grepl("_cft", names(dt))]

然而,这只会返回我转换为data.table的列,但我希望将所有列保留在原始data.table中。我已经尝试过使用:=运算符,但它导致了一个错误:

"Error: unexpected symbol in dt <- dt[, `:=` lapply"

我该怎么做?

请注意,不应将<-:=组合,因为后者是通过引用工作的
您的错误消息表明您没有正确完成作业。您需要指定要分配给的列。执行类似的操作

dt[, `:=` lapply(.SD, function(x) x * 0.0283168), .SDcols= grepl("_cft", names(dt))] 

将不起作用,这就是您收到错误消息的原因。

尝试以下代码:

cols = grep("_cft", names(dt))
dt[, (cols) := lapply(.SD, function(x) x * 0.0283168), .SDcols=cols]
# or simply
dt[, (cols) := lapply(.SD, `*`, 0.0283168), .SDcols=cols]

最新更新