Re: [問題] 用兩個data frame的index來join ?

看板R_Language作者 (天)時間8年前 (2017/03/22 22:00), 8年前編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《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://www.ptt.cc/bbs/R_Language/M.1490191254.A.EA7.html ※ 編輯: celestialgod (36.235.90.162), 03/22/2017 22:06:11

03/25 23:37, , 1F
感謝大大!
03/25 23:37, 1F
文章代碼(AID): #1OqeEMwd (R_Language)
討論串 (同標題文章)
文章代碼(AID): #1OqeEMwd (R_Language)