【发布时间】:2018-05-01 13:12:49
【问题描述】:
+#I just started to code for some cryptocurrencies analysis. But I just encounterd an issue with the code.
_____________________________________________________________________________
library(magrittr)
library(dplyr)
library(tidyverse)
library(crypto)
library(lubridate)
library(xts)
library(quantmod)
library(tidyr)
df <- getCoins(limit = 50)
yourfunction <- function(df, frequency = NULL) {
freq <- frequency
df$date <- lubridate::round_date(df$date, freq)
data <-
df %>% dplyr::group_by(date, slug, symbol, name, ranknow) %>%
dplyr::summarise(
open = dplyr::first(open),
high = max(high),
low = min(low),
close = dplyr::last(close),
volume = sum(volume),
market = dplyr::last(market))
data$volume <- round(data$volume, digits = 0)
data$market <- round(data$market, digits = 0)
data <- as.data.frame(data)
results <- xts::xts(data[, 2:ncol(data)], as.POSIXct(data[, 1], format =
"%d.%m.%Y %H:%M:%S"))
return(results)
}
#### IF NO ERRORS IN ABOVE RUN THESE INDIVIDUALLY------
week_xts <- yourfunction(df, frequency = "week")
str(week_xts)
as.tbl(week_xts) %>%
select(date, slug, open) %>%
spread(slug, open) %>%
tail()
#### IF NO ERRORS IN ABOVE RUN THESE INDIVIDUALLY------
month_xts <- yourfunction(df, frequency = "month")
str(month_xts)
as.tbl(month_xts) %>%
select(date, slug, open) %>%
spread(slug, open) %>%
tail()
########################
#Making daily, weekly and monthly open for ten biggest coins
daily_open <- spread(df[,c(1,4,6)],slug,open)
weekly_open <- spread(week_xts[,c(1, 2, 6)],slug,open)
monthly_open <- spread(month_xts[,c(1, 2, 6)],slug,open)
ten_biggest <- c(list_of_coins[1:10,"slug"])
daily_open <- daily_open[,c("date",ten_biggest)]
weekly_open <- weekly_open[,c("date",ten_biggest)]
monthly_open <- monthly_open[,c("date",ten_biggest)]
#Making daily, weekly and monthly high for ten biggest coins
daily_high <- spread(df[,c(1,4,7)],slug,high)
weekly_high <- spread(week_xts[,c(1,2,7)],slug,high)
monthly_high <- spread(month_xts[,c(1,2,7)],slug,high)
daily_high <- daily_high[,c("date",ten_biggest)]
weekly_high <- weekly_high[,c("date",ten_biggest)]
monthly_high <- monthly_high[,c("date",ten_biggest)]
#Making daily, weekly and monthly low for ten biggest coins
daily_low <- spread(df[,c(1,4,8)],slug,low)
weekly_low <- spread(week_xts[,c(1,2,8)],slug,low)
monthly_low <- spread(month_xts[,c(1,2,8)],slug,low)
daily_low <- daily_low[,c("date",ten_biggest)]
weekly_low <- weekly_low[,c("date",ten_biggest)]
monthly_low <- monthly_low[,c("date",ten_biggest)]
#Making daily, weekly and monthly close for ten biggest coins
daily_close <- spread(df[,c(1,4,9)],slug,close)
weekly_close <- spread(week_xts[,c(1,2,9)],slug,close)
monthly_close <- spread(month_xts[,c(1,2,9)],slug,close)
daily_close <- daily_close[,c("date",ten_biggest)]
weekly_close <- weekly_close[,c("date",ten_biggest)]
monthly_close <- monthly_close[,c("date",ten_biggest)]
#Making daily, weekly and monthly volume for ten biggest coins
daily_volume <- spread(df[,c(1,4,10)],slug,volume)
weekly_volume <- spread(week_xts[,c(1,2,10)],slug,volume)
monthly_volume <- spread(month_xts[,c(1,2,10)],slug,volume)
daily_volume <- daily_volume[,c("date",ten_biggest)]
weekly_volume <- weekly_volume[,c("date",ten_biggest)]
monthly_volume <- monthly_volume[,c("date",ten_biggest)]
#Making daily,weekly and monthly market for ten biggest coins
daily_market <- spread(df[,c(1,4,11)],slug,market)
weekly_market <- spread(week_xts[,c(1,2,11)],slug,market)
monthly_market <- spread(month_xts[,c(1,2,11)],slug,market)
daily_market <- daily_market[,c("date",ten_biggest)]
weekly_market <- weekly_market[,c("date",ten_biggest)]
monthly_market <- monthly_market[,c("date",ten_biggest)]
#Doesn't work
weekly_open_returns <- periodReturn(weekly_open, period="daily", subset=NULL, type="arithmetic",leading="TRUE")
weekly_open_returns <- Return.calculate(weekly_open)
我想为每日、每月和每周频率的每种数据类型(开盘价、最高价、收盘价、成交量、市场、收盘比率和价差)制作一个数据框。这些数据框的构建方式应使每一列代表一种货币,而行代表观察结果。但是,当我尝试对每周和每月频率使用传播函数来执行此操作时,它会出现错误。我应该如何进行?
提前感谢您的帮助。度过愉快的一天。
错误是:
> weekly_open_returns <- periodReturn(weekly_open, period="daily", subset=NULL, type="arithmetic",leading="TRUE")
Error in try.xts(x) :
Error in as.POSIXlt.character(x, tz, ...) : character string is not in a standard unambiguous format
> weekly_open_returns <- Return.calculate(weekly_open)
Error in checkData(prices, method = "xts") :
The data cannot be converted into a time series. If you are trying to pass in names from a data object with one column, you should use the form 'data[rows, columns, drop = FALSE]'. Rownames should have standard date formats, such as '1985-03-15'.
(来自评论:)
我想为每日、每月和每周频率的每种数据类型(开盘价、最高价、收盘价、成交量、市场、收盘比率和价差)制作一个数据框。这些数据框的构建方式应使每一列代表一种货币,而行代表观察结果。但是,当我尝试对每周和每月频率使用传播函数来执行此操作时,它会出现错误。我应该如何进行?提前感谢您的帮助。度过愉快的一天。 – MP PM 28 分钟前
【问题讨论】:
-
我想为每天、每月和每周频率的每种数据类型(开盘价、最高价、收盘价、成交量、市场、收盘比率和点差)制作一个数据框。这些数据框的构建方式应使每一列代表一种货币,而行代表观察结果。但是,当我尝试对每周和每月频率使用传播函数来执行此操作时,它会出现错误。我应该如何进行?提前感谢您的帮助。度过愉快的一天。
-
我建议进行编辑以更好地格式化错误代码。我还在您的问题中添加了评论:请知道某些 cmets 可能是隐藏的(当它们很多时),即使不是某些读者在寻求帮助时也不会阅读 cmets,所以当它与问题(您的评论是 key),您应该编辑问题并添加(可能带有“Update”注释)和/或修复问题。
-
感谢您对格式的帮助和对未来的建议。
-
我正在删除我之前的评论,因为它没有准确地为您提供的内容提供信用,我很抱歉。不过,我可以建议您尝试在一定程度上减少您的问题吗?你的问题不在于数据的获取,所以我建议你可以删除所有检索它的库和代码,而是粘贴来自
dput(head(df,n=10))的输出。这里加载了很多个包,我猜几乎所有这些包都是相关代码的辅助;大代码块吓跑了一些回答者。 -
为了清楚起见:不需要
install.packages(...),只需library(...)用于所有相关 包。我删除了PerformanceAnalytics,因为看起来这里的代码没有使用它。此外,tidyverse包括dplyr、tidyr和lubridate等,因此您可以根据需要简化您自己的代码(这几乎是多余的,不会造成任何伤害)。我认为您没有使用quantmod,因此也可以将其删除。 (我的主题:给我们尽可能多的代码,我们需要重现,但如果可能的话,不要更多。)
标签: r analysis cryptocurrency