#r
#r
Вопрос:
Я пытаюсь преобразовать свой столбец Fecha
в столбец даты. Столбец выглядит как X13.08.2020
, и я могу удалить X
, но я не могу просочиться, чтобы заменить .
на -
. Следующим шагом было бы использовать as.Date()
в mutate()
функции.
dat %>%
mutate(Fecha = str_replace_all(Fecha, "X", ""),
Fecha = str_replace(Fecha, ".", "-"))
Приведенный выше код дает мне:
# A tibble: 68 x 2
Fecha `Total acumulado de casos confirmados desde el inicio (31-01-2020)`
<chr> <int>
1 -3.08.2020 25044
2 -2.08.2020 24512
3 -1.08.2020 24140
Где начальные нули удалены, а точка — нет.
Данные:
dat <- structure(list(Fecha = c("X13.08.2020", "X12.08.2020", "X11.08.2020",
"X10.08.2020", "X09.08.2020", "X06.08.2020", "X05.08.2020", "X04.08.2020",
"X03.08.2020", "X02.08.2020", "X30.07.2020", "X29.07.2020", "X28.07.2020",
"X27.07.2020", "X26.07.2020", "X23.07.2020", "X22.07.2020", "X21.07.2020",
"X20.07.2020", "X19.07.2020", "X16.07.2020", "X15.07.2020", "X14.07.2020",
"X13.07.2020", "X12.07.2020", "X09.07.2020", "X08.07.2020", "X07.07.2020",
"X06.07.2020", "X05.07.2020", "X02.07.2020", "X01.07.2020", "X30.06.2020",
"X29.06.2020", "X28.06.2020", "X27.06.2020", "X26.06.2020", "X25.06.2020",
"X24.06.2020", "X23.06.2020", "X22.06.2020", "X21.06.2020", "X20.06.2020",
"X19.06.2020", "X18.06.2020", "X17.06.2020", "X16.06.2020", "X15.06.2020",
"X14.06.2020", "X13.06.2020", "X12.06.2020", "X11.06.2020", "X10.06.2020",
"X09.06.2020", "X08.06.2020", "X07.06.2020", "X06.06.2020", "X05.06.2020",
"X04.06.2020", "X03.06.2020", "X02.06.2020", "X01.06.2020", "X31.05.2020",
"X30.05.2020", "X29.05.2011", "X28.05.2020", "X27.05.2020", "X26.05.2020"
), `Total acumulado de casos confirmados desde el inicio (31-01-2020)` = c(25044L,
24512L, 24140L, 23761L, 23505L, 22835L, 22423L, 22240L, 21921L,
21752L, 21190L, 21063L, 20787L, 20650L, 20498L, 20121L, 19975L,
19848L, 19757L, 19652L, 19420L, 19357L, 19274L, 19208L, 19140L,
19036L, 18965L, 18898L, 18839L, 18771L, 18676L, 18600L, 18497L,
18413L, 18300L, 18248L, 18225L, 18181L, 18077L, 18032L, 17970L,
17913L, 17869L, 17854L, 17765L, 17697L, 17599L, 17530L, 17473L,
17424L, 17408L, 17317L, 17197L, 17072L, 16979L, 16883L, 16790L,
16756L, 16681L, 16575L, 16442L, 16342L, 16200L, 16133L, 16113L,
16042L, 15906L, 15786L)), row.names = c(NA, -68L), class = c("tbl_df",
"tbl", "data.frame"))
Ответ №1:
Мы можем использовать метасимвол fixed
as .
, который соответствует любому символу или escape ( \
), или поместить его в квадратную скобку ( [.]
)
library(dplyr)
library(stringr)
dat %>%
dplyr::mutate(Fecha = str_remove(Fecha, "^X"),
Fecha = str_replace_all(Fecha, fixed("."), "-"))
Комментарии:
1. Спасибо. Я изменил
str_replace
наstr_replace_all
, и это сработало. Чтоfixed()
здесь означает?2. @user8959427 это говорит о том, что
.
следует буквально оценивать как.
, а не в значении его метасимвола
Ответ №2:
РЕДАКТИРОВАТЬ: упс… Я думал, что это был PHP : (
Лучше использовать встроенный класс DateTime из php. Чтобы вы могли легко манипулировать этим (изменять формат, часовой пояс, интервал и т.д.). Красота 🙂
$mydate = DateTimeImmutable::createFromFormat('Xd.m.Y', "X30.05.2020");
echo $mydate->format('Y-m-d');
Ответ №3:
Другой способ, который вы можете попробовать
library(tidyverse)
library(stringr)
df2 <- dat %>%
mutate(Fecha2 = as.Date(str_replace_all(Fecha, c("^X" = "", "\." = "-")), format = "%d-%m-%Y"))
str(df2)
# tibble [68 x 3] (S3: tbl_df/tbl/data.frame)
# $ Fecha : chr [1:68] "X13.08.2020" "X12.08.2020" "X11.08.2020" "X10.08.2020" ...
# $ Total acumulado de casos confirmados desde el inicio (31-01-2020): int [1:68] 25044 24512 24140 23761 23505 22835 22423 22240 21921 21752 ...
# $ Fecha2 : Date[1:68], format: "2020-08-13" "2020-08-12" "2020-08-11" ...