Как заменить каждое вхождение нескольких строк в столбце одной уникальной новой строкой в ​​R

У меня есть столбец в наборе данных, который начинается с M, F or I, Я хочу заменить все M или же F в колонке с MF и уходи I нетронутым.

data$Sex:
"M"
"F"
"I"
"F"
"M"
"I"

Я попробовал фрагмент, как показано ниже, но безрезультатно.

df <- data$Sex
for(i in names(df)){
  gsub("M","MF",df)
  gsub("F","MF",df)
}

Я новичок в Р. Любая помощь будет оценена.

1 ответ

При условии, что

  • возможные уровни в настоящее время "M", "F" и "I"
  • sex это "factor" колонка

определить отображение levs между старым и новым уровнями, а затем напишите это:

data <- data.frame(sex = c("M", "F", "I", "F", "M", "I")) # test input

Теперь попробуйте один из них:

levs <- c(F = "MF", M = "MF", I = "I") # mapping
transform(data, sex = factor(levs[sex])) ##

levels(data$sex) <- levs # levs defined above

Если sex это "character" столбец, то первый выше все еще работает, если мы удаляем слово factor и это работает так же:

data_c <- data.frame(sex = c("M", "F", "I", "F", "M", "I"), stringsAsFactors = FALSE)
transform(data_c, sex = replace(sex, sex %in% c("M", "F"), "MF"))

и решение помеченное ## также работает, если слово factor опущен

Другие вопросы по тегам