【问题标题】:Error in as.POSIXlt.character(x, tz, …) : character string is not in a standard unambiguous formatas.POSIXlt.character(x, tz, ...) 中的错误:字符串不是标准的明确格式
【发布时间】:2017-04-17 12:48:11
【问题描述】:

我使用的是从excel导入的数据集:

OBX <- read_excel("C:/Users/neri_/Desktop/OBX Weekly Return.xlsx")

         Date          OBX
1   2010-12-28    0.0071366
2   2010-12-29  4.97265e-05
3   2010-12-30  -0.00452489
4   2011-01-03   0.00896603
5   2011-01-04   -0.0101488
6   2011-01-05   0.00520143
7   2011-01-06 -0.000422917
8   2011-01-07  -0.00301145
9   2011-01-10  -0.00341996
10  2011-01-11     0.013326
11  2011-01-12   0.00882484

我正在为这个错误消息而苦苦挣扎,

"as.POSIXlt.character(x, tz, ...) 中的错误:字符串不是标准的明确格式", 我在尝试运行代码时遇到的问题:

weeklydata<-to.weekly(OBX).

我想将每日数据数据转换为每周数据,如何修改日期格式,以便我可以运行 to.weekly 命令?

感谢您的帮助!

【问题讨论】:

  • 是否要将数据从基于月份的格式(如 2012-12-30)转换为基于周的格式(如 2012-52-6)?顺便说一句,一定要在年底进行测试。
  • 请考虑花点时间阅读更多关于格式化您的帖子的信息,因为这将帮助每个试图提供帮助的人。例如,使用代码块(显然是代码)和块引用来表示错误消息。 Read more here.
  • 我只想将每日价格转换为每周价格。通常,当我通过 Quantmod 直接从 Yahoo Finance 下载股票价格时,这不是问题。但是,当我从 excel 文件中导入数据时,就会出现问题。
  • 我将在几秒钟内更新我的答案并提供可能的解决方案。

标签: r excel date quantmod


【解决方案1】:

您可以使用ISOweek 包中的date2ISOweek()。使用stringr 进行模式更新,使用dplyr 生成周结果;加载包后代码是这样的。

library(ISOweek)
library(stringr)
library(dplyr)

# mocking up some data 
OBX <- data.frame(
  Date = c("2010-12-28", "2010-12-29", "2010-12-30", "2010-12-31", "2011-01-03", "2011-01-04"),
  OBX = 101:106
)

# transform form month- to week-based and trim some
OBX$dateWeek <- date2ISOweek(OBX$Date)

# get rid of the preceeding "W", next drop day-of-week
OBX$dateWeek <- stringr::str_replace(OBX$dateWeek, "-W", "-")
OBX$dateWeek <- stringr::str_replace(OBX$dateWeek, "-.$", "")

# sum per week and print
OBX %>% 
  group_by(dateWeek) %>%
  summarise(weekSum = sum(OBX))

# the results of the mocked data
# A tibble: 2 × 2
  dateWeek weekSum
     <chr>   <int>
1  2010-52     410
2  2011-01     211

请让我知道这是否适合您的需求。

【讨论】:

  • 感谢您的努力!我尝试了您的代码,但我认为它不适合我正在寻找的答案。正如我之前提到的,这个例子工作得很好:#download data from Yahoo Finance
【解决方案2】:

as.Date函数转换:

 mydate<-"2010-12-28 0.0071366"
 mydate<-as.Date(mydate,"%Y-%m-%d")
 format(mydate,"%Y-%U")

【讨论】:

  • 我不确定这是否解决了我的问题。我尝试使用您的代码,然后运行 ​​to.weekly 命令。但我得到了同样的错误
【解决方案3】:

我是 R 的新手。我用名称保存了文件

gdpOz <- read_excel("C:/Users/stand/Documents/1.Excel/GDP_2013-18.xlsx",sheet="Sheet1")

它给出了与read.excel 相同的错误和不可预测的错误, 所以我试着用这个来转换,

Date.POSIXlt(Oz[23,],format , tryFormats = c("%Y-%m-%d", "%Y/%m/%d")

和很多其他的组合一味的没有成功, 我发现保存如下的excel文件将文件保存为一般文本,无论如何证明完全无法管理。 Excel save as xlsx

但是,如果您在转换为以下短日期格式后保存为 csv 文件excel short date csv format

然后在R中使用这个命令

Oz2 <- read.csv.zoo("C:/Users/stand/Documents/1.Excel/gdpOz.csv")

它可以毫无顾虑地转换, 问题在于 excels 日期格式与 xlsx 文件,而 R 更喜欢 csv 文件。 出于某种原因,每次您保存或转换任何文件时,如果您尝试重新保存同一个文件,则必须更改文件名,否则无论如何它都无法正常工作。 大多数不是电子表格技术人员或高级用户的人可能永远不会遇到太多关于 R 的 Excel 问题,或者他们每次都会遇到?谁知道?

【讨论】:

    猜你喜欢
    • 2023-02-26
    • 2021-12-11
    • 2013-08-29
    • 2015-01-27
    • 2021-12-30
    • 2020-03-03
    • 1970-01-01
    • 1970-01-01
    • 2018-11-04
    相关资源
    最近更新 更多