我正在尝试根据日期条件制作一个子集。我上传了一个数据集,并尝试使用以下代码将日期从POSIXct转换为日期类:
as.Date(weatherDump$date, "%Y-%m-%d")
似乎将日期转换为y / m / d,但是当我尝试运行该子集时出现错误:
weather2013to2018 <- subset(weatherDump, date >= "2013-01-01" & date<= "2017-12-31")
Warning messages:
1: In Ops.factor(date, "2013-01-01") : ‘>’ not meaningful for factors
2: In Ops.factor(date, "2017-12-31") : ‘<’ not meaningful for factors
当我检查班级(日期)时,它是功能。
我想我在日期转换上出错了吗?
答案 0 :(得分:1)
首先,如果对对象执行任何操作,则需要将其分配回去,以反映更改。
weatherDump$date <- as.Date(weatherDump$date, "%Y-%m-%d")
#In this case you can only use as.Date
#weatherDump$date <- as.Date(weatherDump$date)
第二,如果要检查列的类,则需要使用数据框名称来引用它(除非您已attach
编入了您永远不应该使用的数据框。)
class(weatherDump$date)
如果要比较日期,第三点也是最重要的一点,您需要确保要与之比较的对象也都是班级日期(而不是字符)。
weather2013to2018 <- subset(weatherDump, date >= as.Date("2013-01-01") &
date<= as.Date("2017-12-31"))
lubridate
的另一种选择是使日期的处理更加容易。
library(lubridate)
weatherDump$date <- ymd(weatherDump$date)
weather2013to2018 <- subset(weatherDump, year(date) >= 2013 & year(date) <= 2017)