如何用timeDate包在R中为日期生成新年日指示变量
解决R语言中生成新年日指示变量的问题
嗨,我来帮你搞定这个生成新年日指示变量的需求!其实你已经加载的lubridate和tidyverse就足够轻松实现,当然也可以用你提到的timeDate包来完成,两种方法我都给你列出来:
方法一:用lubridate(更简便,无需额外转换)
既然你已经加载了lubridate,直接利用它的日期提取函数就能判断是否是1月1日:
library(lubridate) library(tidyverse) df <- tribble( ~date, "2010-12-31", "2011-01-01", "2011-01-02") %>% mutate(date = ymd(date)) %>% # 添加新年指示变量 mutate(is_new_year = (month(date) == 1 & day(date) == 1))
运行后查看结果:
> df # A tibble: 3 x 2 date is_new_year <date> <lgl> 1 2010-12-31 FALSE 2 2011-01-01 TRUE 3 2011-01-02 FALSE
这个逻辑很直观:month(date)提取日期的月份,day(date)提取日,当两者同时等于1时,就标记为TRUE(新年日),否则为FALSE。
方法二:用timeDate包实现
如果你一定要用timeDate包,需要先把<date>类型转换成timeDate对象,再用内置的isNewYear()函数判断:
library(timeDate) df <- df %>% mutate(is_new_year = isNewYear(timeDate(date)))
timeDate(date)会把你的日期列转换成timeDate格式,isNewYear()函数会直接识别每个日期是否为新年第一天,返回的逻辑值正好可以作为你的指示变量,运行结果和上面完全一致。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

