【问题标题】:Differentiating between "Mr" and the Mr in "Mrs" using R使用R区分“Mrs”中的“Mr”和“Mr”
【发布时间】:2013-06-14 15:06:07
【问题描述】:

我正在使用 grep 将“先生”和“夫人”替换为“先生”。和“夫人”,但每当我输入

gsub("先生", "先生", data$Title)

它还会导致所有的“夫人”变成“夫人”,这并不是我想要的:P

gsub("Mr\s", "Mr." data$Title)

也不行,因为R(我认为)不承认先生之后的那个空间。

提前感谢您的帮助!

【问题讨论】:

  • 在 R 中,您需要转义两次,一次用于 R,一次用于正则表达式。 gsub('Mr\\s', 'Mr. ', data$Title)gsub('Mr ', 'Mr. ', data$Title).

标签: r gsub


【解决方案1】:
gsub("(Mrs?)", "\\1.", c("Mr Smith", "Mrs Smith"))
#[1] "Mr. Smith"  "Mrs. Smith"

【讨论】:

  • 很好的解决方案,适用于标题后没有空格的情况(就像 OP 想要的那样)。
【解决方案2】:
> gsub("Mr([^s])", "Mr.\\1", c("Mr fdfvgg", "Mrs FLkm"))
[1] "Mr. fdfvgg" "Mrs FLkm"

【讨论】:

  • 它确实有效,但问题是我的“先生”后面没有空格。它更像是 Mrfdfvgg 和 MrsFLkm。
  • [^s] 表示匹配任何不是 s 的字符。这并不意味着一个空间。 @eddi 答案是要走的路。
【解决方案3】:

我认为 eddi 的答案更好,但这里有另一种方法来获得“先生”而不获得“夫人”:

gsub("Mr\\b", "Mr.", c("Mr", "Mrs"))

[1] "Mr." "Mrs"

\\b 表示单词边界。

【讨论】:

    【解决方案4】:

    **您可以直接在 R 上简单地运行一个循环 通过检查 data$Title 的长度


    如果长度==2 => data$Title[i]

    【讨论】:

    • -1 没有格式化,没有解释你循环的内容,我很确定你的意思是nchar而不是length
    猜你喜欢
    • 1970-01-01
    • 2014-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-13
    • 1970-01-01
    相关资源
    最近更新 更多