Заменить несколько значений в столбце новыми значениями - PullRequest
0 голосов
/ 03 марта 2020

У меня есть таблица со столбцом, в котором есть данные в формате week_month_year

Table 1
1_1_2014
1_2_2014
2_3_2015
5_7_2019
XXXXXXX
YYYYYYY

Я хочу заменить значения в таблице на W1 и название месяца, например

W1_Jan_2014
W1_Feb_2014
xxxxxxx
yyyyyyy

Номера недель go от 1 до 7, и у меня годы с 2014 по 2020 годы. Как мне решить эту проблему? Другое ограничение - у меня есть и другие значения в этом столбце, которые должны оставаться такими, как есть, если данные не такие.

Ответы [ 3 ]

3 голосов
/ 03 марта 2020

Или простое базовое решение R:

sapply(strsplit(table_1, "_"), 
       function(x) paste0("W", x[1], "_", month.abb[as.numeric(x[2])], "_", x[3]))
#> [1] "W1_Jan_2014" "W1_Feb_2014" "W2_Mar_2015" "W5_Jul_2019"
2 голосов
/ 03 марта 2020

Было бы неплохо получить больше информации о значениях, которые не подлежали изменению, поскольку приведенные ниже данные могут быть излишне сложными или недостаточно сложными, но вы можете попробовать:

library(stringr)
library(dplyr)

vec <- c("1_1_2014",
         "1_2_2014",
         "2_3_2015",
         "5_7_2019",
         "XXXXXXX",
         "YYYYYYY")

if_else(str_detect(vec, "\\d_\\d+_"), paste0("W", str_replace(vec, "(?<=_)\\d+(?=_)", function(x) month.abb[as.numeric(x)])), vec)

[1] "W1_Jan_2014" "W1_Feb_2014" "W2_Mar_2015" "W5_Jul_2019" "XXXXXXX"     "YYYYYYY"
0 голосов
/ 03 марта 2020

Вы на самом деле задаете несколько вопросов ..

 library(tidyverse)

 d <- tibble(`Table 1`= c("1_1_2014", "1_2_2014", "2_3_2015", "5_7_2019"))

 lookup <- set_names(c("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"),
                     as.character(1:12))

 d %>%
   mutate(`Table 1`= str_c("W", str_extract(`Table 1`, "^\\d+"), "_", 
                           lookup[str_split(`Table 1`, "_", simplify = TRUE)[, 2]],
                           "_", str_extract(`Table 1`, "\\d+$")))

 # A tibble: 4 x 1
 # `Table 1`  
 # <chr>      
 # 1 W1_Jan_2014
 # 2 W1_Feb_2014
 # 3 W2_Mar_2015
 # 4 W5_Jul_2019 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...