【问题标题】:Calculating the number of weeks for each year based on dates using R使用R根据日期计算每年的周数
【发布时间】:2011-12-14 20:01:25
【问题描述】:

我有一个包含 2 个不同年份(2009 年和 2010 年)日期的数据集,并且希望每个日期都有相应的周数。

我的数据集是这样的:

  anim <- c(012,023,045,098,067)
  dob <- c("01-09-2009","12-09-2009","22-09-2009","10-10-2010","28-10-2010")
  mydf <- data.frame(anim,dob)
  mydf
    anim    dob
1   12   01-09-2009
2   23   12-09-2009
3   45   22-09-2009
4   98   10-10-2010
5   67   28-10-2010

我想在第三列中有变量“周”,每个日期对应的周数。

编辑: 注意:每年的第一周从 1 月 1 日开始,第二周从 1 月 8 日开始

任何帮助将不胜感激。

巴兹

【问题讨论】:

  • @nOp:一点也不。我正在处理一组数据(10,000 只动物),需要计算我拥有的一组日期的相应周数。
  • 这是一年中一周的非常奇怪的定义——你确定吗?例如,它使每周在每年的不同工作日开始......
  • @mbq -- 但是动物不关心工作日!这个定义确保了,例如,第 1 周总是指一年中完全相同的部分(包括典型天气等的任何内容)
  • @JoshO'Brien:不正确。我是动物,我很在乎。
  • @JoshuaUlrich:Touche。为什么我从没想过这样一个引人注目的角落案例会被忽视——在编程网站上,同样如此?!

标签: r date week-number


【解决方案1】:

您对“一年中的一周”的定义

编辑:注意:每年的第一周从 1 月 1 日开始,第二周从 1 月 8 日开始

不同于strftime支持的标准:

%U
    Week of the year as decimal number (00–53) using Sunday as the first day 1 
    of the week (and typically with the first Sunday of the year as day 1 of 
    week 1). The US convention.
%W
    Week of the year as decimal number (00–53) using Monday as the first day 
    of week (and typically with the first Monday of the year as day 1 of week 
    1). The UK convention.

所以你需要根据一年中的日期来计算它。

mydf$week <- (as.numeric(strftime(as.POSIXct(mydf$dob, 
                                             format="%d-%m-%Y"), 
                                  format="%j")) %/% 7) + 1

【讨论】:

  • 对不起我提供的定义。那是我为了让自己前进而投入的东西。我向我获得数据的公司发送了一封电子邮件,以确认他们的编号系统,但没有收到任何信息。我决定使用 strftime 支持的编号系统。我再次为我提供的令人困惑的定义道歉!
  • 没关系。不同的定义可以适用于不同的目的。正如乔希所说,“动物不在乎工作日!”所以这看起来并没有什么不合理的。
【解决方案2】:

2011 年的答案

library(lubridate)
mydf$week <- week(mydf$week)

lubridate 包非常适合此类日常任务。

【讨论】:

    【解决方案3】:

    如果您想计算您感兴趣的日期和一年中的第一天之间已经过去了多少周(或 7 天),无论它是一年中的第一天是一周中的哪一天,以下是一个解决方案(使用来自 lubridate 的floor_date)。

    mydf$weeks <- difftime(mydf$dob, floor_date(mydf$dob, "year"), units = c("weeks")))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-23
      相关资源
      最近更新 更多