Сообщение было отредактировано 17 августа 2020 г., чтобы пример больше походил на мои настоящие данные.
Дни всегда начинаются с 1 или 2 цифр. Месяцы всегда идут вторыми полностью или частично и по-французски. Годы всегда идут на третьем месте с 2-мя или 4-мя цифрами.
Я учусь кодировать с помощью пакетов tidyverse. Я пытаюсь заменить все элементы в переменной другой строкой, если они соответствуют определенным условиям. Проблема в том, что я могу выполнить только одно условие за раз. Я хотел бы знать, как добиться этого при нескольких условиях за раз.
Вот воспроизводимый пример:
library(tidyverse)
library(magrittr)
tib <- tibble(
ID = 1:6,
Date = c("1-JAN-20", "15-JUILL-20", "30 DEC 2020",
"1-JAN-20", "15-JUILL-20", "30 DEC 2020"),
Comm = c("Should be 2020-01-01", "Should be 2020-06-15", "Should be 2020-12-30",
"Should be 2020-01-01", "Should be 2020-06-15", "Should be 2020-12-30"))
head(tib)
# A tibble: 6 x 3
ID Date Comm
<int> <chr> <chr>
1 1 1-JAN-20 Should be 2020-01-01
2 2 15-JUILL-20 Should be 2020-06-15
3 3 30 DEC 2020 Should be 2020-12-30
4 4 1-JAN-20 Should be 2020-01-01
5 5 15-JUILL-20 Should be 2020-06-15
6 6 30 DEC 2020 Should be 2020-12-30
# Returns the unique values of the character variables execept the "Comm" one. So, it
# returns only one in that case, but my original data have severals ones.
tib %>% select(where(is.character), -Comm) %>% map(~ unique(.x))
$Date
[1] "1-JAN-20" "15-JUILL-20" "30 DEC 2020"
Мы здесь! Следующий код работает, но мне интересно, есть ли лучший способ получить его вместо того, чтобы каждый раз копировать / передавать одну и ту же строку кода и изменять ее.
tib <- tib %>% mutate(Date = case_when(Date == "1-JAN-20" ~ "2020-01-01",
Date == "15-JUILL-20" ~ "2020-06-15",
Date == "30 DEC 2020" ~ "2020-12-01"))
head(tib)
# A tibble: 6 x 3
ID Date Comm
<int> <chr> <chr>
1 1 2020-01-01 Should be 2020-01-01
2 2 2020-06-15 Should be 2020-06-15
3 3 2020-12-01 Should be 2020-12-30
4 4 2020-01-01 Should be 2020-01-01
5 5 2020-06-15 Should be 2020-06-15
6 6 2020-12-01 Should be 2020-12-30
Поскольку мне придется проделать эту манипуляцию с другими переменными, как я могу создать функцию, которая выполнит это?
Кроме того, я хотел бы знать, знаете ли вы какую-нибудь хорошую документацию / учебные пособия по изучению пакета Purrr?
Спасибо и хорошего дня!
rm(list=ls())
при размещении здесь своего кода, потому что пользователь, воспроизводящий ваш код, может случайно удалить свои переменные. - person daniellga   schedule 16.08.2020