r - 在 R 中计算 periodReturn 时出错
问题描述
我有一个.csv。包含每日 ohlc 汇率数据的文件。现在我需要每小时数据,但是当我尝试使用 quantmod 包的 periodReturn 函数时收到错误消息。这是我所做的:
EURUSD_Min = CSV_EUR
eurusd_minutedata_df = as.data.frame(EURUSD_Min)
colnames(eurusd_minutedata_df)[1] <- "Date"
colnames(eurusd_minutedata_df)[2] <- "Time"
colnames(eurusd_minutedata_df)[3] <- "Bid"
colnames(eurusd_minutedata_df)[4] <- "Ask"
colnames(eurusd_minutedata_df)[5] <- "High"
colnames(eurusd_minutedata_df)[6] <- "Low"
colnames(eurusd_minutedata_df)[7] <- "Close"
eurusd_minutedata_df$Date = as.POSIXct(paste(eurusd_minutedata_df$Date, eurusd_minutedata_df$Time), format="%Y-%m-%d %H:%M:%S")
eurusd_minutedata_df_final <- eurusd_minutedata_df[-2]
index_min_eurusd <- eurusd_minutedata_df_final$Date
data_min_eurusd <- data.frame(eurusd_minutedata_df_final[,2:6])
df.ohlc.min_eurusd_xts <- xts(data_min_eurusd, index_min_eurusd)
eurusd_min_return <- diff(log(Cl(df.ohlc.min_eurusd_xts)), lag=1)
eurusd_min_return
2021-07-28 21:16:00 1.690188e-04
2021-07-28 21:17:00 3.379520e-04
2021-07-28 21:18:00 0.000000e+00
2021-07-28 21:19:00 -1.689617e-04
periodReturn(eurusd_min_return, period = "hourly")
但我得到了错误:
Error in if (on == "secs" || on == "mins") on <- substr(on, 1L, 3L) :
missing value where TRUE/FALSE needed
有谁知道我需要做什么才能使它工作?
原始数据如下所示:# A tibble: 2,982 x 7
`Local Date` `Local Time` Bid Ask High Low Open
<date> <time> <dbl> <dbl> <dbl> <dbl> <dbl>
1 2021-07-30 23:00 1.19 1.19 1.19 1.19 1.19
2 2021-07-30 22:59 1.19 1.19 1.19 1.19 1.19
3 2021-07-30 22:58 1.19 1.19 1.19 1.19 1.19
4 2021-07-30 22:57 1.19 1.19 1.19 1.19 1.19
5 2021-07-30 22:56 1.19 1.19 1.19 1.19 1.19
解决方案
你应该学会检查中间结果。您呼叫的格式规范as.POSIXct
有秒数,但您的数据没有。因此,您在处理的一开始就获得了 NA。这是我的主张的证明。
txt <- "2021-07-30 23:00" # my guess at the results of `paste` on your data
as.POSIXct(txt, format="%Y-%m-%d %H:%M:%S")
#[1] NA
您应该打印出中间结果以找出生成 NA 的位置。(这可能不是唯一的地方,但它肯定会给你一个 NA,所以你可以尝试适当地改变你的格式规范。)
as.POSIXct(txt, format="%Y-%m-%d %H:%M")
#[1] "2021-07-30 23:00:00 PDT"
我怀疑你实际上并没有给出一个明确的描述,如果数据正在处理,因为错误直到你处理的后期才发生。更好的是提供结果dput(head(eurusd_minutedata_df))
作为起点,然后提供所有需要的library
调用来加载所需的包,然后是产生该错误的代码。
推荐阅读
- java - 搜索栏宽度非常小
- c++ - int64_t 不包含 13 位整数
- python - 使用其他模块对 main.py 进行单元测试
- html - 为什么这个下降器显示在 Safari 中的另一个字符下方?
- c# - 如何在 WPF 应用程序中使用 SystemMediaTransportControls?
- javascript - 未捕获的 SyntaxError:JSON 中的意外令牌'
- php - 如何使用 Timber\Post 从 ACF 扩展 WP post 对象数组
- ruby-on-rails - 使用 Foreman 设置 rails 环境
- mysql - 使用 phpMyAdmin 从 MySQL 导出数据不再流式传输
- swift - 如何在 XCode 和 Swift 中创建和重用模块?