R数据.表设置的单元格操作



我正在尝试创建数据的递归应用标量列表。

虚拟数据如下:

   dt <- data.table(mtcars)[1,1:3]
     ncol(dt)
     cols <- colnames(dt)
     for(j in 1:ncol(dt)){
      dt_loop <- dt
      scaled_dt <- dt_loop[,j,with=FALSE]*(1+0.01)
      #drop scaled var
      dt_loop[ , (j) := NULL ]
      jj <- cbind(scaled_dt,dt_loop)
      #go back to original order
      setcolorder(jj,cols)
      assign(paste('dt_', j, sep=''),jj, envir = .GlobalEnv)
     }

然后,我想保存所有分配的排列,即dt_1dt_2dt_3中的单个列表,并通过paste0编程设置列表名称。

我尝试使用set操作员用于data.table,但我失败了。

通常,我正在做的事情似乎非常低效,应该有一种适当的方法来实现从单个数据的递归扩展。

奖励点如果可以为每个dt_1dt_2dt_3创建额外的行,该行描述了对每个元素进行的操作。因此,对于dt_1,它将是一个字符"mpg_+1%"

   mpg    cyl disp Delta
1: 21.21   6  160  mpg_+1%

,最终列表看起来像这样:

dt_list <- list(dt_1 = dt_1,
                dt_2 = dt_2, 
                dt_3 = dt_3)
lapply(names(dt), function(col)
         copy(dt)[, (col) := get(col)*1.01][, Delta := paste0(col, "_+1%")])
#[[1]]
#     mpg cyl disp   Delta
#1: 21.21   6  160 mpg_+1%
#
#[[2]]
#   mpg  cyl disp   Delta
#1:  21 6.06  160 cyl_+1%
#
#[[3]]
#   mpg cyl  disp    Delta
#1:  21   6 161.6 disp_+1%

最新更新