我在StackOverflow上找不到类似的问题。如果它在那里我道歉...
我有一个数据框列表,所有数据框都有日期列和每个日期的值。我想将此列表合并为一个数据框,一个数据列,以及每个列表中的值。
我有这个:
> list
$IBM
Date IBM
1 2012-03-01 98
2 2012-03-02 94
3 2012-03-03 49
4 2012-03-04 48
$AAPL
Date AAPL
1 2012-03-01 43
2 2012-03-02 38
3 2012-03-03 13
4 2012-03-04 10
$HPQ
Date HPQ
1 2012-03-01 62
2 2012-03-02 67
3 2012-03-03 24
4 2012-03-04 37
我想这样:
Date IBM AAPL HPQ
1 2012-03-01 98 43 62
2 2012-03-02 94 38 67
3 2012-03-03 49 13 24
4 2012-03-04 48 10 37
使用do.call("cbind", list)
我明白了:
> do.call("cbind", test)
IBM.Date IBM.IBM AAPL.Date AAPL.AAPL HPQ.Date HPQ.HPQ
1 2012-03-01 98 2012-03-01 43 2012-03-01 62
2 2012-03-02 94 2012-03-02 38 2012-03-02 67
3 2012-03-03 49 2012-03-03 13 2012-03-03 24
4 2012-03-04 48 2012-03-04 10 2012-03-04 37`
这与我想要的非常相似,但有多个重复的日期列。有没有办法做到这一点?优选在基础包装中?
感谢!!!
答案 0 :(得分:1)
如果您的列表看起来像这样
#sample data
dts<-c("2012-03-01","2012-03-02","2012-03-03","2012-03-04")
dd<-list(
IBM=data.frame(Date=dts, IBM=c(98,94,49,48)),
APPL=data.frame(Date=dts, APPL=c(43,38,13,10)),
HPQ=data.frame(Date=dts, HPQ=c(62,67,24,37))
)
然后您可以使用
创建所需的输出Reduce(merge, dd)
# Date IBM APPL HPQ
# 1 2012-03-01 98 43 62
# 2 2012-03-02 94 38 67
# 3 2012-03-03 49 13 24
# 4 2012-03-04 48 10 37