考虑以下代码:

library(data.table)
dataT <-data.table(1:15,runif(15),runif(15),runif(15))

for(vrb in names(dataT)) {
  dataT[get(vrb) < 0.5, (vrb):=0.5] # update value
}

从代码中可以推断出,我基本上将每列的最低值限制为 0.5。为了对行进行子集化,我使用了 get 函数。

这是正确的做法,还是有其他更符合data.table的方法?

最佳答案

我们可以使用 set

for(vrb in names(dataT)){
 set(dataT, i = which(dataT[[vrb]] < 0.5), j = vrb, value = 0.5)
}

第一列中的元素 > 0.5。因此,我们可以将 set 应用于除第一列之外的列
for(vrb in names(dataT)[-1]){
  set(dataT, i = which(dataT[[vrb]] < 0.5), j = vrb, value = 0.5)
 }

关于r - 根据列值更新 data.table 中的列值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40101828/

10-12 17:41