Извлечение значения из столбца - PullRequest
0 голосов
/ 31 октября 2018

У меня есть этот набор данных, я вставляю только несколько данных

"73C23" "62R31" "62M26" "58C44" "53R02" NA      "78R58" "76C63" 

Я пытаюсь написать функцию, которая выполняет следующие операции над строками: Первые два числовых значения должны быть извлечены и сравнены с параметром 18. Если> 18 необходимо добавить к 1900, если <= необходимо добавить к 2000 и сделать отдельный столбец Год. Центральная буква должна сравниваться с этой легендой: mesi_legend </p>

head(mesi_legend)
  January February March April May June
      "A" "B" "C" "D" "E" "H"

И это написано в другой колонке

В то время как последние последние числа должны быть извлечены нормально, если мужчина, вычтите 40, если женщина (в качестве различия я могу использовать> 31, вычтите 40, но у меня есть предел погрешности, я думаю.

Я начинаю с этого:

"GFNNTN78R58G812M"

first step> "78R58"


Output_of_my_function(78R58) > Year 1978
                               Month October
                               Day 18

Может ли кто-нибудь мне помочь?

1 Ответ

0 голосов
/ 31 октября 2018

Здесь можно начать с чего-то, и его легко масштабировать. Используя gsub и группировку, мы можем разделить вашу строку на 3 части, разделенные _, что поможет нам позже, когда мы используем tidyr::separate, чтобы получить Y, M и D

> gsub('(\\d{2})([A-Z])(\\d{2})','\\1_\\2_\\3',"73C23") 
[1] "73_C_23"

library(dplyr)
library(tidyr)
df %>% mutate(X1= gsub('(\\d{2})([A-Z])(\\d{2})','\\1_\\2_\\3',X)) %>% 
    separate(X1,sep = '_',into = c('Year','Month','Day')) %>% 
    mutate(
    Month=case_when(Month=='A' ~ 'Jan',
                    Month=='B' ~ 'Feb',
                    Month=='R' ~ 'Oct',
                    TRUE ~ NA_character_),
    Year=if_else(Year>18, paste0(19,Year),paste0(20,Year)),
    Day=if_else(gsub('.*([A-Z])$','\\1',Y)=='M',as.numeric(Day)-40,as.numeric(Day)-30)
  )

Данные

df <- data.frame(X=c("78R58","62R31","62M26",NA),
              Y=c("GFNNTN78R58G812M","GFNNTN78R58G812F","GFNNTN78R58G812M",NA))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...