带十进制格式的日期的csv

时间:2018-10-30 18:04:07

标签: r csv highcharts

为我提供了一个带有日期列的csv文件,如下所示:

boost::context

这是我将在高级图表中使用的数据,我似乎找不到任何将这些格式转换为YYYYMMDD的功能

似乎这些数据是使用lubridate函数之类的东西在R中创建的,但我无法确认这一点。

是否有关于将数据导入YYYMMDD的最佳方法的想法?

3 个答案:

答案 0 :(得分:1)

类似的事情应该起作用。首先,我们在年初和年底之间进行线性插值,然后根据要求将输出格式化为YYYYMMDD格式:

decimal_to_date = function(dt){
  yr = floor(dt)
  yr_begin = ISOdate(yr, 1, 1, 0, 0, 0)
  yr_end = ISOdate(yr+1, 1, 1, 0, 0, 0)
  interpolated_date = yr_begin + (yr_end - yr_begin) * (dt - yr)
  return(format(interpolated_date, '%Y%m%d'))
}

然后例如decimal_to_date(1990.12466)返回19900215到1990年2月15日。 如果您输出时间和日期,则一天中的时间总是非常接近中午,尽管我不确定确切的时间,但是这暗示了生成数据的过程。

答案 1 :(得分:1)

假设前四位数字代表年份,小数点后的数字代表年份的百分比,则可以使用以下公式将这些值转换为MS Excel日期时间代码:(日期为转换后位于“ A”列中)

=DATE(MID(A1,1,4),1,1)+((A1-MID(A1,1,4))*(IF(OR(MOD(MID(A1,1,4),400)=0,AND(MOD(MID(A1,1,4),4)=0,MOD(MID(A1,1,4),100)<>0)),365, 366)))

一旦有了这些MS Excel日期时间代码,就可以将Excel中的日期格式化为所需的任何格式(请参见Format a date the way you want)。

答案 2 :(得分:0)

就其价值而言,这与Michael Lugo的答案略有不同,确实可以解决问题。 ISOdate()函数输出日期时间对象。以下代码使用as.Date(),仅输出日期。以下代码在计算日历年的天数时也采用了一个简短的捷径-您需要进行插值。此快捷方式需要加载一个库,但是原始答案不需要。

library(lubridate)
decimals <- c(1990.12466,1990.20137,1990.2863,1990.36849,1990.45342,1990.53562,1990.62055,1990.70548,1990.78767,1990.8726,1990.95479,1991.03973)

decimal_to_date2 = function(dt){
  nDays <- yday(paste0(floor(dt),"-12-31"))
  day1 <- as.Date(paste0(floor(dt),"-01-01"))
  interpolated_date <- day1+(dt-floor(dt))*nDays
  return(format(interpolated_date, '%Y%m%d'))
}
decimal_to_date2(decimals)

第一个答案和我的结果相同。