用r中的日期(格式dd-mm-yyyy)替换数值



我想做以下事情。在我的数据集中,我有变量"exact_date"。目前,它是用数值编码的,每个数值代表一个特定的日期,例如:"1"代表"2019年2月19日",以此类推。

我想用格式为(dd-mm-yyyy)的实际日期替换那些数值(1-15)。我尝试了很多命令,例如

gsub("1", "19-02-2019", dataset$exact_date) 

不能产生期望的结果。

相似的,

dataset$exact_date[dataset$exact_date == 1] <- as.character("19-02-2019")

library(tidyverse)
pre_911 %>% mutate_at(
vars(
c('exact_date')
),
funs(
case_when(

. = 2              ~ '20/02/2019',
. = 3            ~ '21/02/2019',
TRUE               ~ as.character(.)
)
)
)

不能产生期望的输出。

有人能帮我实现我想要的吗?

将数值转为日期,原产地为'2019-02-18'

dataset <- data.frame(exact_date =  c(2, 1, 3, 4, 1))
as.Date(dataset$exact_date, origin = '2019-02-18')
#[1] "2019-02-20" "2019-02-19" "2019-02-21" "2019-02-22" "2019-02-19"

如果你想要dmy格式的日期,你可以使用format

format(as.Date(dataset$exact_date, origin = '2019-02-18'), '%d/%m/%Y')
#[1] "20/02/2019" "19/02/2019" "21/02/2019" "22/02/2019" "19/02/2019"

操作符+接受日期。因此,下面表示2019-02-18之后的天数。

as.Date("2019-02-18") + as.integer(dataset$exact_date)

如果它们代表特定的日期,您可以使用这些数字作为索引

dates <- as.Date(c("2019-02-19", "2019-02-20", <other dates>))
dates[as.integer(dataset$exact_date)]

下面是一个使用mutate的例子。

library(tidyverse)
dataset <- tibble(exact_date = c(2, 3, 1))
new_tibble <- dataset %>%
mutate(exact_date = 
case_when(
exact_date == 1            ~ '19/02/2019',
exact_date == 2            ~ '20/02/2019',
exact_date == 3            ~ '21/02/2019',
TRUE                       ~ as.character(exact_date)
)
)
new_tibble
# A tibble: 3 x 1
exact_date
<chr>     
1 20/02/2019
2 21/02/2019
3 19/02/2019

相关内容

最新更新