我有不同列表长度的数据列表:
[[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?
答案 0 :(得分:2)
您考虑过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
如果您认为保留值来自哪个列表元素非常重要,请考虑“{1}}(需要命名列表)或”reshape2“包中的stack
:
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
答案 1 :(得分:0)
这很简单。这个答案有不同的长度
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