代码之家  ›  专栏  ›  技术社区  ›  rg255

R中data.table中“…”调用的列子集的计算

  •  0
  • rg255  · 技术社区  · 6 年前

    我试图在 data.table

    set.seed(1)
    dtX <- data.table(
      "x.unit" = rnorm(10,0,1),
      "y.line" = rnorm(10,0,1),
      "z.line" = rnorm(10,0,1))
    

    我可以通过手动指定列来完成此操作:

    dtX[, maxVal := max(c(y.line,z.line)), by = 1:10]
    

    但在我的真实数据中,我有很多列有长而复杂的名称;我希望避免手动将它们全部写出来。我有一个焦点列向量( focalCol )我想我可以用 ..

    focalCols <- colnames(dtX)[grepl(".line" , colnames(dtX))]
    dtX[, maxVal := max(..focalCols), by = 1:10]
    

    有没有 -我可以引用 数据表 进行计算?


    Type of RHS ('character') must match LHS ('double'). To check and coerce would impact performance too much for the fastest cases. Either change the type of the target column, or coerce the RHS of := yourself (e.g. by using 1L instead of 1)
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Ronak Shah    6 年前

    你可以用 .SDcols

    library(data.table)
    
    focalCols <- grep('\\.line', names(dtX), value = TRUE)
    #Or
    #focalCols <- colnames(dtX)[grepl(".line" , colnames(dtX))]
    
    dtX[, maxVal := max(.SD), .SDcols = focalCols, by = 1:nrow(dtX)]
    dtX
    
    #    x.unit  y.line  z.line  maxVal
    # 1: -0.626  1.5118  0.9190  1.5118
    # 2:  0.184  0.3898  0.7821  0.7821
    # 3: -0.836 -0.6212  0.0746  0.0746
    # 4:  1.595 -2.2147 -1.9894 -1.9894
    # 5:  0.330  1.1249  0.6198  1.1249
    # 6: -0.820 -0.0449 -0.0561 -0.0449
    # 7:  0.487 -0.0162 -0.1558 -0.0162
    # 8:  0.738  0.9438 -1.4708  0.9438
    # 9:  0.576  0.8212 -0.4782  0.8212
    #10: -0.305  0.5939  0.4179  0.5939