Переменная как имя в сводном списке данных. Таблица - PullRequest
1 голос
/ 09 мая 2020

Я собираю R/data.table (v1.12.2), и мне нужно использовать переменную в качестве имени агрегированного столбца. Например:

library(data.table)

DT <- data.table(x= 1:5, y= c('A', 'A', 'B', 'B', 'B'))

aggname <- 'max_x'  ## 'max_x' should be the name of the aggregated column

DT2 <- DT[, list(aggname= max(x)), by= y]
DT2
   y aggname  <- This should be 'max_x' not 'aggname'!
1: A       2
2: B       5

Я могу впоследствии переименовать столбец (столбцы) примерно так:

setnames(DT2, 'aggname', aggname)
DT2
   y max_x
1: A     2
2: B     5

Но я должен был бы проверить, что строка «aggname» не создает дубликатов имена сначала. Есть ли лучший способ сделать это?

1 Ответ

1 голос
/ 09 мая 2020

Мы можем использовать setNames в столбце list

DT[, setNames(.(max(x)), aggname), by = y]
#    y max_x
#1: A     2
#2: B     5

aggname2 <- 'min_x'
DT[, setNames(.(max(x), min(x)), c(aggname, aggname2)), by = y]
#   y max_x min_x
#1: A     2     1
#2: B     5     3

Или другой вариант: lst из dplyr

library(dplyr)
DT[, lst(!! aggname := max(x)), by = y]
#    y max_x
#1: A     2
#2: B     5


DT[, lst(!! aggname := max(x), !! aggname2 := min(x)), by = y]
#   y max_x min_x
#1: A     2     1
#2: B     5     3
...