作者celestialgod (天)
看板R_Language
标题Re: [问题] 用两个data frame的index来join ?
时间Wed Mar 22 22:00:50 2017
※ 引述《Su22 (装配匠)》之铭言:
: [问题类型]:
:
: 程式谘询(我想用R 做某件事情,但是我不知道要怎麽用R 写出来)
:
: [软体熟悉度]:
: 请把以下不需要的部份删除
: 入门(写过其他程式,只是对语法不熟悉)
: [问题叙述]:
: 请简略描述你所要做的事情,或是这个程式的目的
: 假设我捞了0050的股票资料存到data frame
: 这样data frame最前面是日期(但不是data frame的栏位)
: 但该日期栏并不是data frame的栏位
: 如果我又捞了0056的股票资料存到另一个data frame
: data frame最前面也是日期(但不是data frame的栏位)
: 那要如何用日期来join两个data frame ?
: [程式范例]:
:
: #install.packages("quantmod")
: library(quantmod)
: STK0050=get(getSymbols("0050.tw"))
: View(STK0050)
: STK0050DF=data.frame(STK0050)
: str(STK0050DF)#查出来日期并非data frame的栏位
: STK0056=get(getSymbols("0056.tw"))
: View(STK0056)
: STK0056DF=data.frame(STK0056)
: str(STK0056DF)#查出来日期并非data frame的栏位
: #若我要用index:日期来join STK0050与STK0056
: 该怎麽做?
:
善用R的资料ETL工具就可以做到很方便的资料整理
EX:
library(quantmod)
library(data.table)
library(pipeR)
library(stringr)
stocks <- c("0050.tw", "0056.tw", "0061.tw")
lapply(stocks, function(s){
melt(data.table(get(getSymbols(s)), keep.rownames = TRUE), 1,
value.name = "price") %>>%
`[`(j = `:=`(c("stock", "cate"),
data.table(str_match(variable, "(\\d{4}.TW)\\.(.*)")[,2:3]))) %>>%
`[`(j = variable := NULL)
}) %>>% rbindlist %>>% dcast(index + stock ~ cate, value.var = "price")
# index stock Adjusted Close High Low Open Volume
# 1: 2007-12-31 0050.TW 52.20 61.45 61.70 61.05 61.45 2870000
# 2: 2007-12-31 0056.TW 19.89 26.04 26.05 25.70 26.04 3440000
# 3: 2008-01-02 0050.TW 51.05 60.10 61.30 60.00 60.10 4975000
# 4: 2008-01-02 0056.TW 19.66 25.75 26.15 25.70 25.75 3806000
# 5: 2008-01-03 0050.TW 50.20 59.10 59.35 58.60 59.10 7413000
# ---
# 6201: 2017-03-20 0056.TW 24.92 24.92 24.95 24.81 24.81 2447000
# 6202: 2017-03-20 0061.TW 15.65 15.65 15.71 15.64 15.71 2313000
# 6203: 2017-03-21 0050.TW 74.90 74.90 74.90 74.30 74.30 8501000
# 6204: 2017-03-21 0056.TW 25.03 25.03 25.15 24.95 24.95 8274000
# 6205: 2017-03-21 0061.TW 15.66 15.66 15.68 15.63 15.65 1231000
这样不论输入几个stocks都可以很漂亮地把资料整理出来
FYI
--
R资料整理套件系列文:
magrittr #1LhSWhpH (R_Language) https://goo.gl/72l1m9
data.table #1LhW7Tvj (R_Language) https://goo.gl/PZa6Ue
dplyr(上.下) #1LhpJCfB,#1Lhw8b-s (R_Language) https://goo.gl/I5xX9b
tidyr #1Liqls1R (R_Language) https://goo.gl/i7yzAz
pipeR #1NXESRm5 (R_Language) https://goo.gl/zRUISx
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.235.90.162
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1490191254.A.EA7.html
※ 编辑: celestialgod (36.235.90.162), 03/22/2017 22:06:11
1F:推 Su22: 感谢大大! 03/25 23:37