【问题标题】:How to replace every occurance of multiple strings in a column with one unique new string in R如何用R中的一个唯一的新字符串替换列中每个出现的多个字符串
【发布时间】:2017-11-11 19:12:06
【问题描述】:

我在数据集中有一列以M, F or I 开头。我想将列中的所有MF 替换为MF 并保持I 不变。

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

我已经尝试了如下所示的sn-p,但无济于事。:

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

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

【问题讨论】:

  • 使用gsub("M|F", "MF", df$Sex)
  • 或者可能是sub("[MF]", "MF", df$Sex)。如果您经常使用字符串,那么学习正则表达式的基础知识将获得成倍的回报。

标签: r gsub string-substitution


【解决方案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 这个词,标记为## 的解决方案也可以使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-10
    • 1970-01-01
    • 2010-10-20
    • 2021-10-27
    • 2021-06-15
    • 2012-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多