[英]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.