2016-10-24 3 views
1

Я хочу сделать скопления в таблице данных с помощью возвращаемых функций, может быть несколько строк, например summary() или quantile(). Способ, который я делаю до сих пор, таков:Именование соответствующих столбцов данных.table после агрегации в R

library(data.table) 
x = as.data.table(iris) 
x[, as.list(c(summary(Sepal.Length), summary(Sepal.Width))), by = Species] 

Это работает, но приводит к произвольным именам столбцов. Если у меня есть вектор длиной 12, myColumnNames, как я могу назначить новые столбцы для имени после этого вектора (без использования заданных имен в следующей строке)?

Моя «очевидная» попытка, x[, myColumnNames = as.list(c(summary(Sepal.Length), summary(Sepal.Width))), by = Species] не удалась. Есть идеи?

+2

Как насчет 'х [, setNames (as.list (с (резюме (Sepal.Length), резюме (Sepal.Width))), myColumnNames), по = ВИДОВ ] ' – akrun

+1

Что сказал @akrun или вы можете установить имена после' data.table :: setnames'. Например, 'setnames (y, 2: 13, myColumnNames)', где 'y' - результат вашей строки. – nicola

+1

@akrun Ваше решение работает отлично, спасибо! Пожалуйста, опубликуйте его, поэтому я могу принять его как правильный ответ. @nicola Я хочу избежать 'setnames()' после команды, чтобы избежать игры с такими индексами, как '2: 13' – GerasimosPanagiotakopoulos

ответ

2

Одним из вариантов является setNames

x[, setNames(as.list(c(summary(Sepal.Length), 
     summary(Sepal.Width))), myColumnNames), by = Species] 
+0

Работает как очарование! Вы подразумеваете, что есть больше вариантов? – GerasimosPanagiotakopoulos

+0

@GerasimosPanagiotakopoulos Второй вариант - 'setnames', как комментирует @nicola – akrun

Смежные вопросы