我有一个大型数据库,其中有一个日期列,其中包含来自 Excel 的日期数字、缺少年份的不完整日期(但年份在另一列中)以及一些缺少日期的单元格。我找到了如何更改日期的格式,但问题是如何过滤 date
变量中的三种类型的单元格(即 excel 中的日期数字、不完整的日期和空单元格) )。我设法通过按真实数据库中没有的创建列(value
)过滤 a 来做到这一点。
这是我原来的数据库:
这就是我需要的最终结果:
我设法做的是使用虚构的值
列过滤数据集,并将日期
转换为所需的格式。这就是我所做的:
library(dplyr)
data_a <- read.csv(text = "
year,date,value
2018,43238,1
2017,43267,2
2020,7/25,3
2018,,4
2013,,5
2000,8/23,6
2000,9/21,7")
data_b <- data_a %>%
filter(value %in% c(1,2)) %>%
mutate(data_formatted = as.Date(as.numeric(date), origin = "1899-12-30"))
data_c <- data_a %>%
filter(value %in% c(3, 6, 7)) %>%
mutate(data_formatted = as.Date(paste0(year, "/", date)))
data_d <- data_a %>%
filter(value %in% c(4, 5)) %>%
mutate(data_formatted = NA)
data_final <- rbind(data_b, data_c, data_d)
我需要一次执行相同的操作,而不使用 value
列。
最佳答案
您可以对场景使用 do 条件并应用不同的函数来转换为日期。
代码
library(dplyr)
library(stringr)
library(lubridate)
data_a %>%
mutate(
data_formatted = case_when(
!str_detect(date,"/") ~ as.Date(as.numeric(date), origin = "1899-12-30"),
TRUE ~ ymd(paste0(year, "/", date))
)
)
输出
year date value data_formatted
1 2018 43238 1 2018-05-18
2 2017 43267 2 2018-06-16
3 2020 7/25 3 2020-07-25
4 2018 4 <NA>
5 2013 5 <NA>
6 2000 8/23 6 2000-08-23
7 2000 9/21 7 2000-09-21
关于r - 如何从数据库中过滤日期数字、不完整日期和 NA 并转换为 r 中的统一日期类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75118785/