Условное сопоставление строк на основе позиции в строке (r) - PullRequest
0 голосов
/ 26 апреля 2020

Я пытаюсь заполнить некоторые недостающие данные в моем фрейме данных. Некоторым лицам не был введен пол, но это кодируется в их удостоверении личности (вторая буква в удостоверении личности). Я нахожу использование условного сопоставления с образцом трудным, поскольку у меня есть только 1-буквенный «образец», который нужно искать. Мне нужен способ сказать, что я хочу, чтобы if_else / grep искал соответствующий шаблон во втором элементе строки (так как он будет подбирать совпадения в первом элементе)

Вот выдержка из моих данных ...

stack <- tibble(ID = c("HM208", "MF009", "FF103", "FM003", "NF002", "NM003"), Sex= c("M", "F", NA, NA, NA, NA))

Так что мне нужно сделать что-то вроде (используя dplyr) ...

stack <- stack %>% mutate(Sex = if_else("contains M in second element", M, Sex ) %>% 
  mutate(Sex = if_else("contains F in second element", F, Sex )

Я ценю любые советы.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2020

Вот версия, которая учитывает изменение в протоколе. Мы присваиваем значение Sex в зависимости от того, является ли подстрока ID M или F с ifelse().

stack <- tibble(ID = c("HM208", "MF009", "FF103", "FM003", "NF002", "NM003"), Sex= c("M", "F", NA, NA, NA, NA))

library(dplyr)
stack %>% mutate(Sex = (ifelse(substr(ID,2,2) %in% c("M","F"),
                 substr(ID,2,2),Sex )))

... и выводом.

# A tibble: 6 x 2
  ID    Sex  
  <chr> <chr>
1 HM208 M    
2 MF009 F    
3 FF103 F    
4 FM003 M    
5 NF002 F    
6 NM003 M    
> 
0 голосов
/ 26 апреля 2020
stack %>% mutate(
  Sex = substr(ID, 2,2)
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...