我有一些日期,我想为这些日期设置一个指示变量。问题是,我在使用R使用timeDate实现这一点时遇到了困难。下面是一个玩具例子
library(timeDate)
library(lubridate)
library(tidyverse)
>df <- tribble(
~date,
"2010-12-31",
"2011-01-01",
"2011-01-02") %>%
mutate(date = ymd(date))
> df
# A tibble: 3 x 1
date
<date>
1 2010-12-31
2 2011-01-01
3 2011-01-02我想为新年添加一个名为is_new_year的指标。
我尝试了以下方法
df %>% rowwise() %>%
mutate(is_new_year = ifelse(USNewYearsDay(year = year(date)) == date,1,0))得到了错误
Mutate_impl中的错误(.data,dots):评估错误:比较(1)只能用于原子和列表类型。
我该怎么做才能得到
date is_new_year
<date> <int>
1 2010-12-31 0
2 2011-01-01 1
3 2011-01-02 0发布于 2018-03-19 21:17:23
以下是一个解决方案:
# dummy dates
x <- seq(as.Date("1900-01-01"), as.Date("2018-12-31"), by = "day")
# first date of year
first <- subset(x, format(as.Date(x),"%m")==12 & format(as.Date(x),"%d")==31)+1
# find if df dates == first date of year
find <- df$date %in% first
df$find <- ifelse(find == TRUE,1,0)
df产出如下:
> df
# A tibble: 3 x 2
date find
<date> <dbl>
1 2010-12-31 0
2 2011-01-01 1.00
3 2011-01-02 0 发布于 2018-03-19 21:11:25
df%>%mutate(is.newyear=as.numeric(as.Date(paste0(year(date),"-1-1"))==date))
# A tibble: 3 x 2
date is.newyear
<date> <dbl>
1 2010-12-31 0
2 2011-01-01 1
3 2011-01-02 0https://stackoverflow.com/questions/49372119
复制相似问题