Во многих случаях вам может понадобиться преобразовать список во фрейм данных в R. В этом руководстве объясняются три различных способа сделать это.
Метод 1: База R
В следующем фрагменте кода показано, как преобразовать список во фрейм данных, используя только базу R:
#create list
my_list <- list(letters[1:5], letters[6:10])
my_list
[[1]]
[1] "a" "b" "c" "d" "e"
[[2]]
[1] "f" "g" "h" "i" "j"
#convert list to data frame
data.frame(t(sapply(my_list,c)))
X1 X2 X3 X4 X5
1 a b c d e
2 f g h i j
В этом примере sapply преобразует список в матрицу, затем data.frame преобразует матрицу во фрейм данных. Конечным результатом является фрейм данных из двух строк и пяти столбцов.
Метод 2: Таблица данных
В следующем фрагменте кода показано, как преобразовать список из двух вложенных списков во фрейм данных с двумя строками и тремя столбцами с помощью функции rbindlist из библиотеки data.table :
#load data.table library
library(data.table)
#create list
my_list <- list(a = list(var1 = 1, var2 = 2, var3 = 3),
b = list(var1 = 4, var2 = 5, var3 = 6))
my_list
$a
$a$var1
[1] 1
$a$var2
[1] 2
$a$var3
[1] 3
$b
$b$var1
[1] 4
$b$var2
[1] 5
$b$var3
[1] 6
#convert list to data frame
rbindlist(my_list)
var1 var2 var3
1: 1 2 3
2: 4 5 6
В результате получается таблица данных с двумя строками и тремя столбцами. Если вы хотите преобразовать эту таблицу данных во фрейм данных, вы можете просто использовать as.data.frame(DT) .
Этот метод преобразует список во фрейм данных быстрее, чем предыдущий метод, если вы работаете с очень большим набором данных.
Способ 3: Дплыр
В следующем фрагменте кода показано, как преобразовать список из двух вложенных списков во фрейм данных с двумя строками и тремя столбцами с помощью функции bind_rows из библиотеки dplyr :
#load library
library(dplyr)
#create list
my_list <- list(a = list(var1 = 1, var2 = 2, var3 = 3),
b = list(var1 = 4, var2 = 5, var3 = 6))
my_list
$a
$a$var1
[1] 1
$a$var2
[1] 2
$a$var3
[1] 3
$b
$b$var1
[1] 4
$b$var2
[1] 5
$b$var3
[1] 6
#convert list to data frame
bind_rows(my_list)
# A tibble: 2 x 3
var1 var2 var3
1 1 2 3
2 4 5 6
В результате получается фрейм данных с двумя строками и тремя столбцами.
Этот метод также имеет тенденцию работать быстрее, чем базовый R, когда вы работаете с большими наборами данных.