簡體   English   中英

將列表隱藏到R中的data.frame

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM