如何将日期附加到R中的向量?

时间:2014-07-30 20:02:46

标签: r statistics

我使用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格式并附加到向量。有没有办法做到这一点?

感谢。

2 个答案:

答案 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),我建议你按照所描述的方法将结果存储到一个具有期望的格式。