Rでリストをデータフレームに変換する方法


R でリストをデータ フレームに変換したい場合がよくあります。このチュートリアルでは、これを行うための 3 つの異なる方法について説明します。

方法 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 abcde
2 fghij

この例では、 sapply がリストを行列に変換し、次にdata.frame が行列をデータ フレームに変換します。最終結果は、2 行 5 列のデータ フレームになります。

方法 2: データテーブル

次のコード スニペットは、 data.tableライブラリのrbindlist関数を使用して、2 つのネストされたリストのリストを 2 行 3 列のデータ フレームに変換する方法を示しています。

 #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

これにより、2 行 3 列のデータ テーブルが作成されます。このデータ テーブルをデータ フレームに変換する場合は、単にas.data.frame(DT)を使用できます。

非常に大規模なデータ セットを操作している場合、この方法は前の方法よりも速くリストをデータ フレームに変換します。

方法 3: Dplyr

次のコード スニペットは、 dplyrライブラリのbind_rows関数を使用して、2 つのネストされたリストのリストを 2 行 3 列のデータ フレームに変換する方法を示しています。

 #loadlibrary
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

これにより、2 行 3 列のデータ フレームが作成されます。

また、この方法は、大規模なデータセットを操作する場合、基本 R よりも高速に実行される傾向があります。

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です