簡體   English   中英

在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]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM