我有一个相当大的每月数据库,其中的日期记录方式很差。
例如,对于2000年1月,该值为“ 200001”。因此,我的值从“ 200001”到“ 200012”。更糟的是,每个月都记录在不同的.csv文件中。
首先,我将所有.csv文件一起加载,创建了一个名为“ tbl”的列表。因此,例如tbl [[1]]返回一月的值。我需要的是遇到一种有效的方法,将“ 20000i”重新估价为“ 2000-01-0i”,其中我从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 %>% as.character() %>% 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"
))
答案 0 :(得分:2)
为了将输入内容转换为日期对象,您需要在yearmonth上添加一天,然后使用正确的格式:
for (i in 1:length(tbl)) {
tbl[[i]]$DATA <- as.Date(paste(tbl[[i]]$DATA, 01), "%Y%m %d")
}
这将使每个输入都是第一天或第一个月。对于仅仅十二个迭代器来说,for
循环就足够快了。