2016-03-12 4 views
1

У меня есть dataframe с этой структуройR: Spliting dataframe столбцам

x = data.frame(let = letters, LET = LETTERS, num1 = 1:26, num2 = 21:46, num3 = 71:96, num4 = 68:93) 

Я хочу, чтобы разделить его в список из 3-х столбцов dataframes.The первые две колонки пусть и LET остается распространенным явлением, то третья колонка меняется. Первый информационный кадр будет (пусть, LET, num1), а второй будет (let, LET, num2) и так далее.

Моей текущей стратегией является преобразование данных в длинный формат и разделение его на основе num с использованием пакетов plyr и dplyr. Есть ли более простой способ выполнить эту задачу.

ответ

2

Вы можете использовать lapply как и для примера

lapply(1:4, function(D) x[ ,c("let", "LET", paste0("num", D))]) 

Если вы не знаете, имена столбцов в num* столбцов можно использовать

nonLetNames <- names(x)[!(names(x) %in% c("let", "LET"))] 
lapply(nonLetNames, function(nom) x[ ,c("let", "LET", nom)]) 
1

Вот подход, основанный на

Map
Map(function(x,y,z) setNames(cbind(x,y), c(names(x), z)), 
      list(x[1:2]), x[-(1:2)], names(x)[-(1:2)]) 
Смежные вопросы