当我将as.Date函数放入for循环时,我的as.Date函数会产生不同的结果。我正在查找包含图像的子文件夹(每个日期)的文件夹。我构建date_list来组织所有日期(用于在后期绘制选项)。朱利安日从今年1月1日开始,因为我有4年的约会,这一年必须灵活。
# Set up list with 4 columns and counter Q. jan is used to set all dates to the first of january
date_list <- outer(1:52, 1:4)
q = 1
jan <- "-01-01"
for (scene in folders){
year <- as.numeric(substr(scene, start=10, stop=13))
day <- as.numeric(substr(scene, start=14, stop=16))
datum <- paste(year, day, sep='_')
date_list[q, 1] <- datum
date_list[q, 2] <- year
date_list[q, 3] <- day
date_list[q, 4] <- as.Date(day, origin = as.Date(paste(year,jan, sep="")))
q = q+1
}
输出最后一行:
[52,] "2016_267" "2016" "267" "17068"
我在date_list [q,4]中缺少什么不能将我的整数转移到日期? 运行以下代码确实有效,但由于我希望自动化大量的场景和文件夹:
as.Date(day, origin = as.Date(paste(year,jan, sep="")))
感谢您的时间!
答案 0 :(得分:0)
你的意思是把你的一天输出为3个数字吗?它应该不是2个数字吗?
day <- as.numeric(substr(scene, start=15, stop=16))
或
day <- as.numeric(substr(scene, start=14, stop=15))
这至少可以成为问题的一部分。提供一个典型的&#34;场景&#34;的例子。在这里会有所帮助。
答案 1 :(得分:0)
好吧,我认为这会回答你的第一个问题:
date_list[q, 4] <- as.character(as.Date(datum,format="%Y_%j"))
as.Date
接受format
参数,({1}}中记录了%Y和%j),strptime
是朱利安日,这有点容易阅读而不是使用原始和多个粘贴调用。
您的问题实际上与%j
对象的关联:
Date
当输入> dput(as.Date("2016-01-10"))
structure(16810, class = "Date")
(您的matrix
)时,它会被强制转换为字符w
在此之前没有经过特殊处理:
date_list
因此,您只获得自1970-01-01以来的天数。当您使用> d<-as.Date("2016-01-10")
> class(d)<-"character"
> d
[1] "16810"
要求将日期作为字符表示时,它会提供正确的值,因为as.character
类作为Date
方法,在返回字符值之前首先以人格式计算日期
现在,如果我理解你的问题,我就会这样:
首先创建一个函数来处理一个字符串:
as.character
这个函数只是得到你的子串,然后将它转换为POSIXlt类,它给我们一次通过julian日,年和日。由于年份自1900年起存储为整数(可能为负数),因此我们必须在字段中存储年份时添加1900。
然后,如果您的name_to_list <- function(name) {
dpart <- substr(name, start=10, stop=16)
date <- as.POSIXlt(dpart, format="%Y%j")
c("datum"=paste(date$year+1900,date$yday,sep="_"), "year"=date$year+1900, "julian_day"=date$yday, "date"=as.character(date) )
}
变量是字符串向量:
folders
lapply(folders,name_to_list)
给出了:
folders=c("LC81730382016267LGN00","LC81730382016287LGN00","LC81730382016167LGN00")