免責聲明:
任何投資行為均有其風險,作為一名投資者,應為自己任何投資決策行為承擔所有風險。
本網站當盡力提供正確之資訊,所載資料均來自或本諸我們相信可靠之來源,但對其完整性、即時性和正確性不做任何擔保,如有錯誤或疏漏,本網站所有人及關係人,並不負任何法律責任。
本文非任何形式之投資建議,不保證所提供之資訊可以創造獲利、減少投資損失,亦不會鼓吹任何具體之投資行動。本網站所有人及關係人,對於本網站資訊使用者直接或間接依賴並參考相關資訊後,採取任何投資行為所導致之直接或間接損失,或因此產生之一切責任,均不負任何損害賠償及其他法律上之責任。
任何投資行為均有其風險,作為一名投資者,應為自己任何投資決策行為承擔所有風險。
本網站當盡力提供正確之資訊,所載資料均來自或本諸我們相信可靠之來源,但對其完整性、即時性和正確性不做任何擔保,如有錯誤或疏漏,本網站所有人及關係人,並不負任何法律責任。
本文非任何形式之投資建議,不保證所提供之資訊可以創造獲利、減少投資損失,亦不會鼓吹任何具體之投資行動。本網站所有人及關係人,對於本網站資訊使用者直接或間接依賴並參考相關資訊後,採取任何投資行為所導致之直接或間接損失,或因此產生之一切責任,均不負任何損害賠償及其他法律上之責任。
說明
本文說明如何在 R session 中篩去股票資料中不會用到的部分。將資料瘦身後,運算起來會比較快。
前置作業
去除非必要欄位
用 subset
函式可將用不到的欄位移除。此處保留原始資料,另外建一個新的變數來存修改後的資料:
itot2 <- subset(itot, select = -c(Open, High, Low, Adj.Close))
保留特定年份的資料
承上,僅保留特定年份的交易記錄:
itot3 <- itot2[as.numeric(format(itot2$Date, "%Y")) == 2021, ]
此處的運作方式是將 Date
欄位轉為數字向量後,進行比較運算,以取出想要的結果。運算結果是一個布林向量,當成取交易記錄的索引。
若想取出特定時間區間的資料,要用兩個條件運算後取其交集:
itot2years <- as.numeric(format(itot2$Date, "%Y"))
itot3 <- itot2[2017 <= itot2years & itot2years <= 2021, ]
若指令較長,可以將運算結果存在一個中間變數中,這樣指令看起來比較簡潔。
節錄特定日期後的股價交易記錄
我們延伸先前的概念,撰寫一個可自動節錄特定日期後的股價交易記錄的 R 命令稿:
args <- commandArgs(trailingOnly=TRUE)
if (length(args) != 2) {
stop("Wrong argument")
}
if (!grep("\\d+-\\d+-\\d+", args[1])) {
stop("Not a valid date")
}
if (!file.exists(args[2])) {
stop("No data sheet loaded")
}
# Read the data sheet.
sheet <- read.csv(args[2], header=TRUE, stringsAsFactors=TRUE)
# Convert the data strings to the data objects.
sheet$Date <- as.Date(sheet$Date)
# Crop the data sheet by a specific date.
sheet <- sheet[(sheet$Date >= args[1]),]
# Name the output data sheet.
output <- paste(tools::file_path_sans_ext(basename(args[2])),
"cropped", sep="-")
output <- paste(output, "csv", sep=".")
# Write the cropped data to a data sheet.
write.csv(sheet, output, row.names = FALSE)
因為這些動作是固定的,每次都要載入 R 環境操作比較慢。我們寫了一個可重覆使用的 R 命令稿。請自行閱讀程式碼。
使用方式如下:
$ Rscript cropByDate.R 2019-01-01 ITOT.csv