Преобразование списков векторов в список кадров данных - PullRequest
1 голос
/ 04 мая 2019

У меня есть несколько списков векторов, которые я хочу превратить в кадры данных.

list1 <- list(A1 = LETTERS[1:10], B1 = LETTERS[3:12], C1 = LETTERS[11:20])
list2 <- list(A2 = 2:11, B2 = 1:10, C2 = 3:12)
list3 <- list(A3 = 100:109, B2 = 110:109, C3 = 105:114)

Я хочу, чтобы i-й вектор в каждом списке был столбцом во фрейме данных i.Другими словами, я хочу получить следующий вывод:

> df_list
[[1]]
   col1 col2 col3
1     A    2  100
2     B    3  101
3     C    4  102
4     D    5  103
5     E    6  104
6     F    7  105
7     G    8  106
8     H    9  107
9     I   10  108
10    J   11  109

[[2]]
   col1 col2 col3
1     C    1  110
2     D    2  109
3     E    3  110
4     F    4  109
5     G    5  110
6     H    6  109
7     I    7  110
8     J    8  109
9     K    9  110
10    L   10  109

[[3]]
   col1 col2 col3
1     K    3  105
2     L    4  106
3     M    5  107
4     N    6  108
5     O    7  109
6     P    8  110
7     Q    9  111
8     R   10  112
9     S   11  113
10    T   12  114

Я знаю, что для этого можно использовать циклы for:

df_list <- NULL
for (i in 1:length(list1)) {df_list[[i]] <- data.frame(col1 = list1[[i]], col2 = list2[[i]], col3 = list3[[i]])}
df_list

Есть ли более эффективный способ сделать это?используя только базовые функции R?

Спасибо!

1 Ответ

1 голос
/ 04 мая 2019

Мы можем использовать Map, передать три списка в качестве ввода и cbind

Map(cbind.data.frame, col1 = list1, col2 = list2, col3 = list3)


#$A1
#   col1 col2 col3
#1     A    2  100
#2     B    3  101
#3     C    4  102
#4     D    5  103
#5     E    6  104
#6     F    7  105
#7     G    8  106
#8     H    9  107
#9     I   10  108
#10    J   11  109

#$B1
#   col1 col2 col3
#1     C    1  110
#2     D    2  109
#3     E    3  110
#4     F    4  109
#5     G    5  110
#6     H    6  109
#.....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...