r - 在 R : Setting new Values in a data. 表中快速

标签 r data.table

我正在尝试以有效的方式为 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 迭代器。

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

关于r - 在 R : Setting new Values in a data. 表中快速,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31590587/

相关文章:

根据行中的另一个变量删除具有相同值的行

r - 将列名作为参数传递给函数

用最新的非 NA 值替换 NA

r - 使用多个列键调用 data.table 上的行

r - 通过引用处理具有 := (data. 表分配的复杂公式)

r - 如何使用 ggplot2 更改细粒度的颜色图例

r - 按列值 >0 过滤多行

r - 将 geom_rect() 添加到 ggplot2 中的时间序列数据

r - 按时间和 id r 传播字符列

r - 当应用于 df[i,] 中的数据帧时, foreach %dopar% 实际在做什么