在 R 中:快速设置 data.table 中的新值

in R: Setting new Values in a data.table fast

我正在尝试以一种有效的方式将值设置为 data.table。下面的代码可以满足我的要求,但对于大型数据集来说太慢了:

DTcars<-as.data.table(mtcars)
for(i in 1:(dim(DTcars)[1]-1)){
  for(j in 1:dim(DTcars)[2]){
    if(DTcars[i,j, with=F]>10){
      set(DTcars,
          i=as.integer(i),
          j =as.integer(j)  ,
          value = DTcars[dim(DTcars)[1],j,with=F])
    }
  }
}

我想要这样的东西...这完全是一个错误的代码,但表达了我的需要,我认为它会更快。这意味着我想对我的 data.table 进行子集化并为特定列插入相同的值并为每一列重复。

DTcars<-as.data.table(mtcars)
ns<-names(DTcars)
for(j in 1:length(ns)){
  DTcars[ns[j]>10]<-DTcars[20,ns[j]]
}

我想你在找

for (j in names(DTcars)) set(DTcars,
  i     = which(DTcars[[j]]>10),
  j     = j,
  value = tail(DTcars[[j]],1)
)

列号或名称可以用作此处的for迭代器。

value 在 OP 中的两段代码之间发生了变化,所以我不确定。

IMO set 应该谨慎使用,常规 := 几乎总是足够的:

for (col in names(DTcars))
  DTcars[get(col) > 10, (col) := get(col)[.N]]