разделить фрейм данных и создать множество фреймов данных или список

Я хочу создать список или несколько data.frame из кадра данных одновременно после разделения матрицы. Я использую функцию combn для создания матрицы. Например:

 combos<-combn(1:3, 2)
 combos
 [,1] [,2] [,3]
 [1,]    1    1    2
 [2,]    2    3    3                                                            

После того, как у меня есть фрейм данных с 3 столбцами.

col1<-c(0,2,4);col2<-c(1,3,5);col3<-c(6,7,8)
df<-cbind.data.frame(col1,col2,col3)
df
      col1 col2 col3
 1    0    1    6
 2    2    3    7
 3    4    5    8 

Используя комбо, я хотел бы получить следующие результаты во фрейме данных или списке:

 df1
      col1 col2
 1    0    1  
 2    2    3  
 3    4    5  
df2
      col1  col3
 1    0      6
 2    2      7
 3    4      8 
df3
      col2 col3
 1     1    6
 2     3    7
 3     5    8    

После этого я хотел бы объединить этот фрейм данных или список с другими фреймами данных или списком, чтобы получить такой результат: использование этого нового dfo данных

 col1<-c('a','c'); col2<-c('b','d')
 dfo<-cbind.data.frame(col1,col2)
      col1 col2
 1    a    b
 2    c    d

 df1o
      col1 col2
 1    0    1  
 2    2    3  
 3    4    5
 4    a    b
 5    c    d  

 df2o
      col1  col3
 1    0      6
 2    2      7
 3    4      8 
 4    a      b
 5    c      d

 df3o
      col2 col3
  1     1    6
  2     3    7
  3     5    8 
  4     a    b
  5     c    d 

У меня 3000 df и 5000 dfo


person Leandro Jimenez    schedule 27.03.2016    source источник
comment
combn(1:3, 2, FUN=function(x) rbind(df[,x], setNames(dfo, names(df[,x]))), simplify=FALSE) (при условии, что вы хотите объединить цифры и буквы таким образом)   -  person user20650    schedule 28.03.2016
comment
Спасибо user20650. Я ошибаюсь в посте. буквы были только для примера. Я хочу объединить числа и числа (dfo тоже числа). Извините, это был мой первый пост!   -  person Leandro Jimenez    schedule 28.03.2016
comment
При этом редактировании матрицы не пострадали.   -  person IRTFM    schedule 28.03.2016


Ответы (1)


Фактически, вы можете использовать lapply для перебора списка.

combos <- combn(1:3, 2)

col1 <- c(0,2,4); col2 <- c(1,3,5); col3 <- c(6,7,8)
df <- cbind.data.frame(col1,col2,col3)

df.1 <- lapply(1:ncol(combos), function(i){df[, combos[,i]]})

col1 <- c('a','c'); col2 <- c('b','d')
dfo <- cbind.data.frame(col1,col2)

dfo.1 <- lapply(df.1, function(x){
  names(dfo) <- names(x)
  return(rbind(x, dfo))
})
# [[1]]
#   col1 col2
# 1    0    1
# 2    2    3
# 3    4    5
# 4    a    b
# 5    c    d
# 
# [[2]]
#   col1 col3
# 1    0    6
# 2    2    7
# 3    4    8
# 4    a    b
# 5    c    d
# 
# [[3]]
#   col2 col3
# 1    1    6
# 2    3    7
# 3    5    8
# 4    a    b
# 5    c    d
person Ven Yao    schedule 28.03.2016