Использование R для перемещения конца строки в начало строки другой переменной для некоторых строк

#r #string

#r #строка

Вопрос:

Я очищаю данные в R, и в некоторых CSV-файлах появляется досадная ошибка. Иногда первая буква school символьной переменной вместо этого добавляется в конец gender переменной (которая обычно представляет собой один символ, m или f ). Примеры:

 mydata <- data.frame(
  gender = c('m', 'm  H', 'f', 'f  C'),
  school = c('Hills College', 'ills College', 'Christian College', 'hristian College')
)
  

Как я могу определить эти ошибки и переместить конечную букву в gender на ее законное место в начале school ?

Ответ №1:

Это может быть решением:

 library(tidyverse)
mydata %>% 
  mutate(school = if_else(str_count(gender) == 1,
                          school,
                          str_c(str_sub(gender, start = -1),
                                school)))
  

Ответ №2:

Вы могли бы сделать:

 transform(mydata, 
         gender = sub("\s \w \s*", "", gender),
         school = paste0(sub("\w\s*","", gender), school))
  gender            school
1      m     Hills College
2      m     Hills College
3      f Christian College
4      f Christian College
  

В tidyverse вы могли бы сделать:

 library(tidyverse)
mydata %>%
  separate(gender, c("gender","first_char"), fill = "right") %>%
  replace_na(list(first_char = ""))%>%
  unite(school,first_char, school,sep = "")

  gender            school
1      m     Hills College
2      m     Hills College
3      f Christian College
4      f Christian College
  

Ответ №3:

Мы можем попробовать использовать sub для базовой опции R:

 # concatenate last letter of gender to front of school, if gender has dangling letter
mydata$school <- ifelse(grepl(" \w$", mydata$gender),
                        paste0(sub("^.*(\w)$", "\1", mydata$gender), mydata$school),
                        mydata$school)

# remove dangling letter from gender, if present
mydata$gender <- sub("\s \w$", "", mydata$gender)
mydata

  gender            school
1      m                 2
2      m     Hills College
3      f                 1
4      f Christian College