0

これは、昨日投稿した質問のフォローアップです。Rでの浮動小数点の比較については、正しく理解できないようです。昨日>=、2つの浮動小数点値を比較するために使用していましたが、その結果は正しい結果になっているようです。

今日、私は2つのベクトルで要素ごとに実行しようとしましたが、このアプリケーションでは機能しないを生成しました。ベクトルを返すための比較関数が必要です。次に、それを見つけて、と組み合わせました。これはより正確になりましたが、100%正確ではありません。私は何が間違っているのですか?これは財務データなので、10進数のデータ型を使用する必要がありますか?もしそうなら、どのように?all.equalmean differenceidenticalmapply

昨日の投稿から(更新されたコードで、現在の欲求不満を反映しています):

目標は次のとおりです。データをに読み込み、昨日の、、、および価格data.frameの平均を取ります。そして、今日の始値を昨日の平均と比較します。 HighLowClose

大きなデータでスクリプトを実行した後、の結果がで実行された同様の分析とR 一致しないExcelことがわかりました。問題を本質的な部分に縮小しました。私のテストファイルはtest.csv次のようになり、最後の行の最後に新しい行が含まれています。

<TICKER>,<DATE>,<TIME>,<OPEN>,<LOW>,<HIGH>,<CLOSE>
EURUSD,20020311,0:00:00,0.8733,0.873,0.877,0.8749
EURUSD,20020312,0:00:00,0.8749,0.8704,0.876,0.8754
EURUSD,20020313,0:00:00,0.8753,0.8725,0.878,0.8754
EURUSD,20020314,0:00:00,0.8753,0.8752,0.8841,0.8823
EURUSD,20020315,0:00:00,0.8823,0.8808,0.8868,0.8823
EURUSD,20020318,0:00:00,0.8809,0.878,0.8828,0.8821
EURUSD,20020319,0:00:00,0.8821,0.8796,0.884,0.8816
EURUSD,20020320,0:00:00,0.8815,0.8786,0.8857,0.8855
EURUSD,20020321,0:00:00,0.8854,0.8806,0.8857,0.8823

私のコード:

# Read in test file
raw <- read.csv('test.csv', header=TRUE, sep=",")

# Convert date and dump dat into data frame
stripday <- strptime(raw$X.DATE, format="%Y%m%d")
data <- data.frame(stripday, raw)

# Drop unused data columns and name used columns
drops <- c("X.DATE.", "X.TIME.", "X.TICKER.")
data <- data[, !(names(data) %in% drops)]
colnames(data) <- c("Date", "Open", "Low", "High", "Close")

# Convert values from facotrs to numeric
data[,2] <- as.numeric(as.character(data[,2]))
data[,3] <- as.numeric(as.character(data[,3]))
data[,4] <- as.numeric(as.character(data[,4]))
data[,5] <- as.numeric(as.character(data[,5]))

# Take average of High, Low, and Close 
data[['Avg']] <- NA
data[['Avg']][2:9] <- (
    data[['High']][1:8] + 
    data[['Low']][1:8] + 
    data[['Close']][1:8]) / 3

# Is Open greater than or equal to Average
data[['OpenGreaterThanOrEqualAvg']] <- NA
data[['OpenGreaterThanOrEqualAvg']][2:9] <- 1 * (mapply(identical,data[['Open']][2:9], data[['Avg']][2:9]) | data[['Open']][2:9] > data[['Avg']][2:9])

# Write data to .csv
write.table(data, 'output.csv', quote=FALSE, sep=",", row.names=FALSE)

2002年3月14日には、0ではなく1が必要であることに注意してください。

4

0 に答える 0