首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用“`timeDate`”作为日期指示符

使用“`timeDate`”作为日期指示符
EN

Stack Overflow用户
提问于 2018-03-19 20:46:57
回答 2查看 73关注 0票数 0

我有一些日期,我想为这些日期设置一个指示变量。问题是,我在使用R使用timeDate实现这一点时遇到了困难。下面是一个玩具例子

代码语言:javascript
复制
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的指标。

我尝试了以下方法

代码语言:javascript
复制
df %>% rowwise() %>% 
  mutate(is_new_year = ifelse(USNewYearsDay(year = year(date)) == date,1,0))

得到了错误

Mutate_impl中的错误(.data,dots):评估错误:比较(1)只能用于原子和列表类型。

我该怎么做才能得到

代码语言:javascript
复制
  date          is_new_year
  <date>         <int>
1 2010-12-31       0
2 2011-01-01       1
3 2011-01-02       0
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-19 21:17:23

以下是一个解决方案:

代码语言:javascript
复制
# 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

产出如下:

代码语言:javascript
复制
> 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  
票数 0
EN

Stack Overflow用户

发布于 2018-03-19 21:11:25

代码语言:javascript
复制
 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          0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49372119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档