【问题标题】:How to convert from yearweek to yearmonthday?如何从年周转换为年月日?
【发布时间】:2019-04-15 15:12:29
【问题描述】:

我有这个日期向量:

dput(date)

c("1981035", "1981036", "1981037", "1981038", "1981039", "1981040",
  "1981041", "1981042", "1981043", "1981044", "1981045", "1981046",
  "1981047", "1981048", "1981049", "1981050", "1981051", "1981052",
  "1982001", "1982002", "1982003", "1982004", "1982005", "1982006",
  "1982007", "1982008", "1982009", "1982010", "1982011", "1982012",
  "1982013", "1982014", "1982015", "1982016", "1982017", "1982018",
  "1982019", "1982020", "1982021", "1982022", "1982023", "1982024",
  "1982025", "1982026", "1982027", "1982028", "1982029", "1982030",
  "1982031", "1982032", "1982033", "1982034", "1982035", "1982036",
  "1982037")

它被指定为 yearweek [第 1 周涵盖一年中的第 1 到第 7 天]。我想将其转换为年月日格式并尝试了以下方法,但没有成功:

as.Date(date, "%Y%U")

【问题讨论】:

  • 日期格式不明确。第五个数字 (0) 代表什么?它只是一个分隔符吗?您希望每个元素在哪一天?一周的第一天?
  • 是的,第五位数字没用,我想要一周的第一天或最后一天(没关系)。
  • 看起来这些可能是%Y%U%w,或以星期几结尾的类似格式,解释了多余的数字。但正如@VictorNautica 所说,格式不明确。
  • 是的,我们可以忽略第五个数字。

标签: r date


【解决方案1】:

您必须为他们指定一周中的某一天。否则,它无法转换为特定日期,因为它指的是日期范围。用%w选择第0天,即星期日,可以使用下面的代码。

as.Date(paste0(da, '0'), format = '%Y0%U%w')

注意:这假设第五位数字不包含任何信息。这对我来说似乎很奇怪,但根据 OP 是正确的。

编辑:@Kath 指出将数据视为 %Y%w%U 格式可能更有意义,因此您可以使用下面更简单的代码获得相同的结果

as.Date(da, format = '%Y%w%U')

【讨论】:

  • 你也可以简单地说as.Date(da, "%Y%w%U"),如果你仍然使用星期天?
  • 是的,这是一个更好的主意
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-06
  • 1970-01-01
  • 2017-04-06
  • 1970-01-01
  • 1970-01-01
  • 2018-06-15
相关资源
最近更新 更多