2016-06-05 2 views
6

Я хотел бы преобразовать data.frame в список data.frames по столбцу, используя базовые функции R и удерживая первую константу столбца. Например, я хотел бы разделить DF на список из трех data.frames, каждый из которых включает в себя первый столбец. То есть, я хотел бы получить список LONG без необходимости отдельно выводить каждый элемент списка. Спасибо.R конвертировать data.frame в список по столбцу

DF <- data.frame(OBS=1:10,HEIGHT=rnorm(10),WEIGHT=rnorm(10),TEMP=rnorm(10)) 
DF 

LONG <- list(HEIGHT = DF[c("OBS", "HEIGHT")], 
      WEIGHT = DF[c("OBS", "WEIGHT")], 
      TEMP = DF[c("OBS", "TEMP" )]) 

LONG 

SHORT <- as.list(DF) 
SHORT 

SPLIT <- split(DF, col(DF)) 

ответ

6

Мы можем цикл через names из «DF», кроме первого, cbind первой колонке с подмножеством «DF» от names.

setNames(lapply(names(DF)[-1], function(x) cbind(DF[1], DF[x])), names(DF)[-1]) 

Или другой вариант был бы

Map(cbind, split.default(DF[-1], names(DF)[-1]), OBS=DF[1]) 
+0

Очень здорово, хотя мне интересно, если есть способ включить имена список, как мой LONG пример делает или, если есть способ использовать as.list или разделенных функций. – user1491868

+1

@ user1491868 мы можем использовать 'setNames'. просто обновлено – akrun

+1

@DavidArenburg Это должно сработать. Спасибо, что напомнил об этом. – akrun

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