【问题标题】:Efficient way to recode multiple date values in R在 R 中重新编码多个日期值的有效方法
【发布时间】:2019-04-19 19:11:17
【问题描述】:

我有一个相当大的月度数据库,其中日期的记录方式很差。

例如,对于 2000 年 1 月,该值为“200001”。所以我的值范围从“200001”到“200012”。更糟糕的是,每个月都记录在不同的 .csv 文件中。

首先,我将所有 .csv 文件一起加载,创建了一个名为“tbl”的列表。例如,tbl[[1]] 返回一月份的值。我需要的是找到一种有效的方法将“20000i”重估为“2000-01-0i”,其中 i 从 1 变为 12,然后将这些值转换为日期格式。

我试过的是:

for (i in length(tbl)) {
  if (i < 10) {
    tbl[[i]]$DATA %>% as.character() %>% revalue(c(paste0("20000",i) = paste0("2000-01-0",i))) %>%  as.Date() -> tbl[[i]]$DATA
  } else {
    tbl[[i]]$DATA %>% as.character() %>% revalue(c(paste0("2000",i) = paste0("2000-01-",i))) %>%  as.Date() -> tbl[[i]]$DATA
  }
}

此方法不起作用并返回以下错误: Error: unexpected '=' in " tbl[[i]]$DATA %&gt;% as.character() %&gt;% revalue(c(paste0("2000",i) ="

有人有更好的主意吗?

编辑:我的数据示例

list(c("200001", "200001", "200001", "200001", "200001", "200001","200001", "200001", "200001", "200001", "200001", "200001"), 
c("200002", "200002", "200002", "200002", "200002", "200002", 
"200002", "200002", "200002", "200002", "200002", "200002"
), c("200003", "200003", "200003", "200003", "200003", "200003", 
"200003", "200003", "200003", "200003", "200003", "200003"
), c("200004", "200004", "200004", "200004", "200004", "200004", 
"200004", "200004", "200004", "200004", "200004", "200004"
), c("200005", "200005", "200005", "200005", "200005", "200005", 
"200005", "200005", "200005", "200005", "200005", "200005"
), c("200006", "200006", "200006", "200006", "200006", "200006", 
"200006", "200006", "200006", "200006", "200006", "200006"
), c("200007", "200007", "200007", "200007", "200007", "200007", 
"200007", "200007", "200007", "200007", "200007", "200007"
), c("200008", "200008", "200008", "200008", "200008", "200008", 
"200008", "200008", "200008", "200008", "200008", "200008"
), c("200009", "200009", "200009", "200009", "200009", "200009", 
"200009", "200009", "200009", "200009", "200009", "200009"
), c("200010", "200010", "200010", "200010", "200010", "200010", 
"200010", "200010", "200010", "200010", "200010", "200010"
), c("200011", "200011", "200011", "200011", "200011", "200011", 
"200011", "200011", "200011", "200011", "200011", "200011"
), c("200012", "200012", "200012", "200012", "200012", "200012", 
"200012", "200012", "200012", "200012", "200012", "200012"
))

【问题讨论】:

  • 只是让他们约会?请提供您的数据样本。
  • 谢谢@Dave2e,这正是我想要的!如果您能将其作为正确答案,我将不胜感激,以便我接受!

标签: r dplyr


【解决方案1】:

为了将您的输入转换为日期对象,您需要在年月中添加一天,然后使用正确的格式:

for (i in 1:length(tbl)) {
   tbl[[i]]$DATA <- as.Date(paste(tbl[[i]]$DATA, 01), "%Y%m %d")
}

这将使每个输入都是第一天或第一个月。对于十几个元素,for 循环就足够快了。

【讨论】:

  • 你的意思是1:length(tbl)seq_along(tbl) :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-14
  • 1970-01-01
  • 2018-08-06
相关资源
最近更新 更多