我想做以下事情。在我的数据集中,我有变量"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