cbind список фреймов данных в R - PullRequest
1 голос
/ 03 октября 2019

У меня есть list 3 data.frames (X, Y, Z). Используя BASE R , мне было интересно, как я могу cbind переменные с одинаковыми именами для этих data.frames и сохранять их в виде списка?

Для примера ниже я хочу, чтобы все переменные AA s для 3 data.frames, все переменные BB s для 3 data.frames, и все переменные CC s для 3 data.frames отдельно cbind ed и сохранены в виде списка?

Примечание: имена могут быть любыми, а число переменных может быть любым числом. Решение функции (al) высоко ценится.

r <- list( 

X = data.frame(

     AA = c(1,1,1,1,3,2), 
     BB = c(1,1,1,2,2,2), 
     CC = c(2,2,3,1,2,1)), 

Y = data.frame(

     AA = c(1,1,1,1,3,2), 
     BB = c(1,1,1,2,2,2), 
     CC = c(2,2,3,1,2,1)),

Z = data.frame(

     AA = c(1,1,1,1,3,2), 
     BB = c(1,1,1,2,2,2), 
     CC = c(2,2,3,1,2,1)))

Ответы [ 2 ]

2 голосов
/ 03 октября 2019

В base R мы можем cbind list элементов в один, а затем сделать split

m1 <- do.call(cbind, r)
split.default(m1, sub("^.*\\.", "", names(m1)))
2 голосов
/ 03 октября 2019

Способ использования purrr и dplyr состоит в tranpose списке, а затем bind_cols вместе

library(dplyr)
library(purrr)

transpose(r) %>% map(bind_cols)

#$AA
# A tibble: 6 x 3
#      X     Y     Z
#  <dbl> <dbl> <dbl>
#1     1     1     1
#2     1     1     1
#3     1     1     1
#4     1     1     1
#5     3     3     3
#6     2     2     2

#$BB
# A tibble: 6 x 3
#      X     Y     Z
#    <dbl> <dbl> <dbl>
#1     1     1     1
#2     1     1     1
#3     1     1     1
#4     2     2     2
#....
#....

В базе R, беря первый кадр данных спискав качестве справочного кадра данных мы можем сделать

all_cols <- names(r[[1]])
#To get common names between all dataframes.
#all_cols <- Reduce(intersect, lapply(r, names)) 
lapply(all_cols, function(x) sapply(r, `[[`, x))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...