为我提供了一个带有日期列的csv文件,如下所示:
boost::context
这是我将在高级图表中使用的数据,我似乎找不到任何将这些格式转换为YYYYMMDD的功能
似乎这些数据是使用lubridate函数之类的东西在R中创建的,但我无法确认这一点。
是否有关于将数据导入YYYMMDD的最佳方法的想法?
答案 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)
第一个答案和我的结果相同。