我使用vector()函数创建了一个向量:
actual_dates_vector <- vector()
然后我从文本字符串中提取Julian日期(例如:2008201):
julian_date<-substr(files[r],10,16)
然后我将Julian日期转换为YYYY-MM-DD格式:
actual_date<-strptime(julian_date, "%Y %j")
这给了我类似于&#34; 2009-07-28&#34;的价值。然后我需要将它附加到最初创建的向量。为此我这样做:
actual_dates_vector<-c(actual_dates_vector,actual_date)
但是这给了我:
$sec
[1] 0
$min
[1] 0
$hour
[1] 0
$mday
[1] 28
$mon
[1] 6
$year
[1] 109
$wday
[1] 2
$yday
[1] 208
$isdst
[1] 1
我不明白发生了什么。此代码实际上在多个日期的循环中运行,因此我希望从每个日期字符串中提取日期,转换为YYYY-MM-DD格式并附加到向量。有没有办法做到这一点?
感谢。
答案 0 :(得分:2)
strptime
会返回一个POSIXlt
对象,实际上就是您正在看到的列表。如果您使用as.POSIXct
代替strptime
,您将获得所需的结果。
此外,您调用的所有函数都是矢量化的,因此您不需要执行此追加策略,而应该能够:
strptime(substr(files, 10 ,16), '%Y %j')
或者那些东西。
正如评论中所指出的那样,as.POSIXct
会调用strptime
。
答案 1 :(得分:2)
如果你喜欢&#34;循环&amp;追加&#34;方法,你可以这样做:
# random data to emulate your files
files <- c("2008281","2009128","2010040")
n_files <- length(files)
# loop & append
actual_dates_vector <- vector()
for(r in 1:n_files){
dts <- as.POSIXct(files[r],format="%Y%j")
# convert dts (POSIXct class objects) to character with the desired format
dts <- format(dts,format="%Y-%m-%d")
actual_dates_vector <- c(actual_dates_vector,dts)
}
日期对象实际上是其他内容。正如您所看到的,POSIXlt
实际上是日期组件的列表,而POSIXct
基本上是双倍的,所以它们不是您打印时看到的内容(打印格式也取决于本地设置,因此您可以在不同的机器上获得不同的结果)
出于这个原因,既然你说你想要一个特定的日期表示(即YYYY-MM-DD
),我建议你按照所描述的方法将结果存储到一个具有期望的格式。