[英]Covert list to data.frame in R
我有不同列表長度的數據列表:
[[1]]
[1] "2009" "2010" "2011" "2012"
[[2]]
[1] "2010" "2011" "2012" "2013"
[[3]]
[1] "2008" "2009" "2010" "2011" "2012"
[[4]]
[1] "2011" "2012"
我想得到一列data.frame像這樣:
2009
2010
2011
2012
2010
2011
....
我繼續這樣做不成功:
# transpose list of years
YearsDf <- lapply(GetYears, data.frame)
刪除colnames(因為數據幀列表給出了一些奇怪的列名):
YearsOk <- lapply(YearsDf, function(x) "colnames<-"(x, NULL))
這一切都來自:
[[1]]
NA
1 2009
2 2010
3 2011
4 2012
[[2]]
NA
1 2010
2 2011
3 2012
4 2013
......
現在只需綁定並獲取data.frame。 這給了NA
ldply(YearsOk, data.frame)
我如何進入一列的data.frame?
你考慮過unlist
嗎?
myL <- list(as.character(2009:2012),
as.character(2010:2011),
as.character(2009:2014))
data.frame(year = unlist(myL))
# year
# 1 2009
# 2 2010
# 3 2011
# 4 2012
# 5 2010
# 6 2011
# 7 2009
# 8 2010
# 9 2011
# 10 2012
# 11 2013
# 12 2014
如果您認為保留值來自哪個列表元素很重要,請考慮stack
(需要命名列表)或從“reshape2”包中melt
:
library(reshape2)
melt(myL)
# value L1
# 1 2009 1
# 2 2010 1
# ...SNIP...
# 11 2013 3
# 12 2014 3
## stack requires names, so add some in...
stack(setNames(myL, seq_along(myL)))
# values ind
# 1 2009 1
# 2 2010 1
# ...SNIP...
# 12 2014 3
最后,這絕對不是我要采取的方法,但根據您的示例代碼,也許您嘗試執行以下操作:
do.call(rbind, lapply(myL, function(x) data.frame(year = x)))
這很簡單。 這個答案有不同的長度
Q<-list(a=a,b=b)
str(Q)
List of 2
$ a: int [1:11] 1 2 3 4 5 6 7 8 9 10 ...
$ b: int [1:29] 2 3 4 5 6 7 8 9 10 11 ...
Q$a
[1] 1 2 3 4 5 6 7 8 9 10 11
T<-c(Q$a,Q$b)
T
[1] 1 2 3 4 5 6 7 8 9 10 11 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
[28] 18 19 20 21 22 23 24 25 26 27 28 29 30
TT<-data.frame(T)
TT
T
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
11 11
12 2
13 3
14 4
15 5
16 6
17 7
18 8
19 9
20 10
21 11
22 12
23 13
24 14
25 15
26 16
27 17
28 18
29 19
30 20
31 21
32 22
33 23
34 24
35 25
36 26
37 27
38 28
39 29
40 30
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.