#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