我有一個如下所示的資料框,但有更多的列(444 行情)和 12 個月。
date <- as.Date(c(?2020-01-01“, ?2020-02-01“, ?2020-03-01“))
ticker1 <- c(0.01, 0.02, 0.03)
ticker2 <- c(0.015, 0.025, 0.035)
mydata <- data.frame(date, ticker1, ticker2)
我想將每月資料擴展到每天,并在這里找到了一些簡潔的代碼:
mydata %>% mutate(date = ymd(date)) %>%
group_by(date) %>%
expand(date = seq(floor_date(date, unit = "month"),
ceiling_date(date, unit="month")-days(1), by="day"), **ticker1**) %>%
as.data.frame()
地板/天花板日期方法僅適用于特定地址的列(例如按列名稱或通過 $),但是,它不會讓我使用向量或類似的,并且手動輸入 444 列名稱似乎非常低效。
如果我使用向量,則日期會混亂,因為同一日期出現多個值。
會發生什么:|date|ticker1|ticker2|...ticker n| |:--|:--:|:--:|--:| |2020-01-01|0.01|0.015|0.xxx| |2020-01-01|0.02|0.025|0.xxx| |2020-01-01|0.03|0.035|0.xxx|
我想要的是:|date|ticker1|ticker2|...ticker n| |:--|:--:|:--:|--:| |2020-01-01|0.01|0.015|0.xxx| |2020-01-02|0.01|0.015|0.xxx| |2020-01-03|0.01|0.015|0.xxx|
我不知道如何正確尋址資料框的所有列,以便維護資料框的預期結構。
萬分感謝!
uj5u.com熱心網友回復:
您可以通過一個額外的步驟來做到這一點,并將資料連接在一起,然后使用它fill來獲得您想要的。所以首先創建日期范圍。將這些與原始資料集連接在一起,使用該月第一天的資料對 NA 進行排序和填充。
library(dplyr)
library(tidyr)
library(lubridate)
date <- ymd(c("2020-01-01", "2020-02-01", "2020-03-01"))
ticker1 <- c(0.01, 0.02, 0.03)
ticker2 <- c(0.015, 0.025, 0.035)
df1 <- data.frame(date, ticker1, ticker2)
all_dates <- df1 %>%
group_by(date) %>%
expand(date = seq(floor_date(date, unit = "month"),
ceiling_date(date, unit="month")-days(1), by="day"))
out <- df1 %>%
right_join(all_dates) %>%
arrange(date) %>%
fill(starts_with("ticker"))
head(out)
date ticker1 ticker2
1 2020-01-01 0.01 0.015
2 2020-01-02 0.01 0.015
3 2020-01-03 0.01 0.015
4 2020-01-04 0.01 0.015
5 2020-01-05 0.01 0.015
6 2020-01-06 0.01 0.015
編輯:在股票代碼的情況下,您可以使用:
out <- df1 %>%
right_join(all_dates) %>%
arrange(date) %>%
fill(everything())
PS不要呼叫data.frame df。df是 F 分布的基 R 函式。使用 df 作為變數名可能會導致代碼中出現意外錯誤。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/348064.html
上一篇:您如何填充缺失的滯后日期?
