【问题标题】:Converting date column in data frame转换数据框中的日期列
【发布时间】:2014-07-06 11:25:30
【问题描述】:

R 版本:3.1.0

已阅读以下主题: - format a Date column in a Data Frame - Convert data frame with date column to timeseries

以及有关此主题的其他一些信息,但没有任何运气。

我只需要从 .csv 文件导入数据框,并且我需要索引是日期列指定的日期列。

df <- read.csv(sti, header=TRUE)
df$Date <- as.Date(df$Date, format="%Y%m%d")

(我尝试了其他几种日期格式)

这应该相当简单,但结果要么是一列填充了 N/As,一列有错误的日期和一条错误消息。

我的 csv 文件包含 Excel 日期格式,我尝试在 Windows 中更改语言设置。

我知道它与日期格式有关,但我不知道是什么。即使是头部的 dput() 似乎也很遥远。这是一个简短的版本:

structure(list(Date = c("30/12/2013", "27/12/2013", "23/12/2013", 
"20/12/2013", "19/12/2013", "18/12/2013"), MAERSKA = c(11180, 
11150, 10900, 10770, 10670, 10500), WDH = c(527, 522, 515.5, 
515.5, 512, 504.5), VWS = c(160.2, 159.8, 157, 156.6, 156.5, 
153), TRYG = c(524.5, 523, 520.5, 519, 504, 484), TOP = c(142.8, 
142.5, 141.9, 141.5, 139.9, 136.5), TDC = c(52.6, 52.7, 52.45, 
51.95, 51.65, 51.85), Pandora = c(294, 301.2, 304, 300.3, 296.1, 
293.1), NOVOB = c(198.8, 197.2, 195.1, 196.3, 195.6, 190.7), 
    Nordea = c(72.05, 71.35, 70.6, 70.1, 68.65, 67.8), COLOB = c(359, 
    358.3, 353.4, 353.2, 350.2, 342), CHR = c(215.4, 215.7, 212.3, 
    209.1, 206.3, 204.2), CARLB = c(600, 596, 586.5, 586, 584, 
    573), MAERSKB = c(11770, 11740, 11510, 11310, 11210, 11070
    ), JYSKE = c(292.5, 288, 284.4, 282.8, 276.9, 275.7), GN = c(133.2, 
    132.3, 130.5, 129, 127.8, 126.2), GENMAB = c(212, 214.9, 
    217.4, 222.5, 221.6, 216.7), FLS = c(296.1, 290.3, 280.3, 
    278.1, 273.6, 267.1), DSV = c(177.8, 178.2, 176.8, 174, 171.2, 
    169.3), DANSKE = c(124.4, 124.3, 124.3, 123.7, 121, 120.3
    ), NOVOZYMESB = c(228.9, 229.9, 228.5, 230.4, 219.9, 215.6
    )), .Names = c("Date", "MAERSKA", "WDH", "VWS", "TRYG", "TOP", 
"TDC", "Pandora", "NOVOB", "Nordea", "COLOB", "CHR", "CARLB", 
"MAERSKB", "JYSKE", "GN", "GENMAB", "FLS", "DSV", "DANSKE", "NOVOZYMESB"
), row.names = c(NA, 6L), class = "data.frame")

附加信息:

> sessionInfo()
R version 3.1.0 (2014-04-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=English_United Kingdom.1252 
[2] LC_CTYPE=English_United Kingdom.1252   
[3] LC_MONETARY=English_United Kingdom.1252
[4] LC_NUMERIC=C                           
[5] LC_TIME=English_United Kingdom.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base 

我希望有人知道可能导致问题的原因。稍后我需要将数据框转换为动物园对象,因为包 PerformanceAnalytics 需要此作为输入。

【问题讨论】:

  • 我可能不明白这个问题 - 问题只是你需要做as.Date(df$Date, format="%d/%m/%Y" ) 来适应你的格式吗?
  • 请把你手动添加到dput输出的“.....”去掉,否则不容易复制粘贴。
  • 如果我粘贴完整的 dput() 输出,它将超过字符限制。 @user3114046 我需要将日期列转换为 R 的日期列,以便稍后我可以将我的数据框转换为动物园对象。 Read.zoo() 无法读取 csv 文件,所以我想将其作为数据框读取,然后再进行转换。
  • 使用dput(head(df))。这将仅包括 df 的前 6 行。
  • 他做到了,但他将日期视为一个因素。 @Marco,尝试使用 stringsAsFactors = FALSE 读取您的数据。

标签: r date


【解决方案1】:

使用您在上面发布的数据,日期列是一个字符。而且由于您的日期看起来像“30/12/2013”​​格式应该是“%d/%m/%Y”而不是“%Y%m%d”。获取正确的格式以进行转换非常重要。因此你应该能够做到

df$Date <- as.Date(df$Date, format="%d/%m/%Y")

有了样本数据,

> class(df$Date)=="Date"
[1] TRUE
> sum(is.na(df$Date))==0
[1] TRUE

所以一切看起来都很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-24
    • 2021-02-23
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多