首页 > 解决方案 > R data.table:.SD 的名称不可分配

问题描述

通常,我想在 DT 中操作多个变量,并且需要根据它们的名称或类来选择列名。

d <- data.table(x = 1:10, y= letters[1:10])

# My usual approach
col <- str_subset(names(d), '^x')
d[, (col) := 2:11]

但是,这样做会非常有用且不那么冗长:

 d[, (names(.SD)) := 2:11, .SDcols = patterns('^x')]

但这会引发错误:

Error in `[.data.table`(d, , `:=`((names(.SD)), 2:11), .SDcols = patterns("^x")) : 
  LHS of := isn't column names ('character') or positions ('integer' or 'numeric')
> 

.SD 的列名是可用的,但是:

> d[, names(.SD), .SDcols = patterns('^x')]
[1] "x"

为什么 .SD 的名称不能在 := 的 LHS 上分配?

标签: rdata.table

解决方案


如前所述,这还不可能。解决方法只添加一行代码:

cols = grep('^x', names(d))
d[ , (cols) := 2:11, .SDcols = cols]

推荐阅读