如何用R中的一个唯一新字符串替换列中多个字符串的每个出现

时间:2017-11-11 19:12:07

标签: r gsub string-substitution

我在数据集中有一个以M, F or I开头的列。我想用M替换列中的所有FMF,并保持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)
}

我是R的新手。任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

假设

  • 目前可能的水平&#34; M&#34;,&#34; F&#34;和&#34;我&#34;
  • 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,标记为##的解决方案也有效。