วิธีแปลงรายการเป็น data frame ใน r


มีหลายกรณีที่คุณอาจต้องการแปลงรายการเป็นเฟรมข้อมูลใน 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 abcde
2 fghij

ในตัวอย่างนี้ sapply จะแปลงรายการเป็นเมทริกซ์ จากนั้น data.frame จะแปลงเมทริกซ์เป็นเฟรมข้อมูล ผลลัพธ์ที่ได้คือกรอบข้อมูลสองแถวห้าคอลัมน์

วิธีที่ 2: DataTable

ข้อมูลโค้ดต่อไปนี้แสดงวิธีแปลงรายการสองรายการที่ซ้อนกันเป็นกรอบข้อมูลที่มีสองแถวและสามคอลัมน์โดยใช้ฟังก์ชัน 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

ผลลัพธ์ที่ได้คือตารางข้อมูลที่มีสองแถวและสามคอลัมน์ หากคุณต้องการแปลงตารางข้อมูลนี้เป็น data frame คุณสามารถใช้ as.data.frame(DT) ได้

เมธอดนี้จะแปลงรายการเป็นเฟรมข้อมูลเร็วกว่าวิธีก่อนหน้า หากคุณทำงานกับชุดข้อมูลที่มีขนาดใหญ่มาก

วิธีที่ 3: Dplyr

ข้อมูลโค้ดต่อไปนี้แสดงวิธีแปลงรายการสองรายการที่ซ้อนกันเป็นกรอบข้อมูลที่มีสองแถวและสามคอลัมน์โดยใช้ฟังก์ชัน bind_rows ของไลบรารี dplyr :

 #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

ผลลัพธ์ที่ได้คือกรอบข้อมูลที่มีสองแถวและสามคอลัมน์

วิธีนี้ยังมีแนวโน้มที่จะทำงานได้เร็วกว่าฐาน R เมื่อทำงานกับชุดข้อมูลขนาดใหญ่

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *