在R中使用数据帧执行getSunlightTimes函数吗?

时间:2019-04-20 18:03:42

标签: r spatial

我希望您可以使用getSunlightTimes函数来支持我。我有一个像素级数据帧(“ latlon2”),其纬度(“ lat”),经度(“ lon”)和一个日期(“ date”)格式为YYYY-MM-DD。数据覆盖了美国大陆,并且数据框中还有一个状态代码变量。

要获取date变量作为日期类变量,我执行了:

latlon2$date=as.Date(latlon2$d2003s)

我正在尝试使用getSunlightTimes来标识指定日期每个像素的日出和日落时间。但是,我很难使该功能正常工作。除了R的帮助指南之外,关于此命令的信息并不多,所以我希望你们中的一些人已经使用它,并且可以根据我的方法提出您的建议。

首先,我尝试使用getSunlightTimes函数指定数据框中的每个纬度/经度/日期列

sunrise2003CET=getSunlightTimes(date="latlon2$date", lat="latlon2$lat", lon="latlon2$lon", tz="CET", keep = c("sunrise", "sunset"))

R返回错误:

  

getSunlightTimes中的错误(日期=“ latlon2 $ date2”,lat =“ latlon2 $ lat”,   :date必须是Date对象(Date类)

令人沮丧的是,当我查看class(latlon2 $ date)R时,它会验证该列是否为“ Date”类!

接下来,我尝试仅指定数据帧:

sunrise2003CET=getSunlightTimes(data="latlon2", tz="CET", keep = c("sunrise", "sunset"))

R返回错误:

  

.buildData中的错误(日期=日期,纬度=纬度,lon = lon,数据=数据):   all(c(“ date”,“ lat”,“ lon”)%in%colnames(data))不正确

这似乎很奇怪,因为我将数据帧中的列命名为“ date”,“ lat”,“ lon”,但是错误可能是由于数据帧中还有其他变量(例如状态码)

我正在尝试在15年(和四个时区)的多个日期中执行此任务,因此,对于如何使它运行以及如何高效运行的任何建议,我们将不胜感激!

非常感谢!

科莱特

1 个答案:

答案 0 :(得分:0)

问题出在引号上。当你写

sunrise2003CET=getSunlightTimes(date="latlon2$date", 
                                lat="latlon2$lat",
                                lon="latlon2$lon", 
                                tz="CET", 
                                keep = c("sunrise", "sunset"))

您不应将datelatlon参数的表达式放在引号中,因为R会将它们视为字符串。 (您可以尝试class("latlon2$date")来查看。)只需将其写为

sunrise2003CET=getSunlightTimes(date=latlon2$date, 
                                lat=latlon2$lat,
                                lon=latlon2$lon, 
                                tz="CET", 
                                keep = c("sunrise", "sunset"))