[英]How can I convert a list of tables to a data.frame in R?
有一個命名列表,例如:
set.seed(1)
list <- list(table(sample(LETTERS[1:10], 50, replace = T)), table(sample(LETTERS[1:20], 50, replace = T)))
names(list) <- LETTERS[1:2]
如何將此列表轉換為一個數據框,用元素名稱填充空白?
例如,由於行號不同,下面的代碼會出錯:
as.data.frame(list)
Error in (function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE, :
arguments imply differing number of rows: 10, 18
通過這樣做可以手動為這個小表:
rbind(data.frame(Name = "A", Letters = list$A), data.frame(Name = "B", Letters = list$B))
Name Letters.Var1 Letters.Freq
1 A A 3
2 A B 3
3 A C 3
4 A D 4
5 A E 6
6 A F 6
7 A G 6
8 A H 3
9 A I 8
10 A J 8
11 B A 3
12 B B 2
13 B D 1
14 B F 4
15 B G 5
16 B H 4
17 B I 1
18 B J 3
19 B K 3
20 B L 3
21 B M 4
22 B N 3
23 B O 1
24 B P 4
25 B Q 2
26 B R 2
27 B S 4
28 B T 1
你知道如何為有幾十個表的列表縮放這個嗎?
謝謝您的幫助。
您可以使用purrr
的map_df
:
result <- purrr::map_df(list, as.data.frame, .id = 'Name')
result
# Name Var1 Freq
#1 A A 3
#2 A B 3
#3 A C 3
#4 A D 4
#5 A E 6
#6 A F 6
#7 A G 6
#8 A H 3
#9 A I 8
#10 A J 8
#11 B A 3
#12 B B 2
#13 B D 1
#14 B F 4
#15 B G 5
#16 B H 4
#17 B I 1
#18 B J 3
#19 B K 3
#20 B L 3
#21 B M 4
#22 B N 3
#23 B O 1
#24 B P 4
#25 B Q 2
#26 B R 2
#27 B S 4
#28 B T 1
基礎 R 有點冗長,但可以通過以下方式實現:
tmp <- lapply(list, as.data.frame)
do.call(rbind, Map(cbind, Name = names(tmp), tmp))
如果您更喜歡data.table
:
library(data.table)
rbindlist(Map(stack,list),idcol = "Name")
# Name values ind
# 1: A 3 A
# 2: A 3 B
# 3: A 3 C
# 4: A 4 D
# 5: A 6 E
# 6: A 6 F
#...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.