首页 > 解决方案 > 使用 R 在 Gsub 中包含/维护空间

问题描述

这可能是一个基本问题,并且可能已得到回答,但找不到任何直接帖子:

目标:用“”或“1:n”替换文本/字符向量中的特定单词,理想情况下使用 gsub,也可以接受其他想法。

详细信息:我为 gsub 运行了一个循环,它成功了,但它替换了每个“i”,当我只想要“i”时(前后有空格被替换,保留所有其他 i 在单词中。所以也适用于“ to” - 必须只替换完整的单词 => “我去了 indigo 镇”必须变成“went town indigo”,当前代码(原则上)使其“自己去”任何输入将不胜感激,谢谢!

这是我在 R 中编写的循环(同样,可能已过时/效率低下):

a1 <- NULL
for(j in 1:length(xt1)) {
  for (i in 1:length(st1)) {

    xt1[j] = gsub(st1[i], " ", xt1[j])

  } 
  a1[j] = gsub(st1[i], " ", xt1[j])
}
head(a1)

st1

st1 [1] "u" "e" "to" "the" "a" "and" "you" "for" "of" "i"

XT1

xt1 [1] “很高兴看到 Sofia Kenin 在里昂获得第 5 名,尤其是在她#AusOpen 胜利之后不久。总是出现在巡回赛中,并通过连续四次三盘比赛来努力赢得冠军。 "
[2] “@KeepUKtogether @waltersboy_ 离开学校的积极目标越来越好。许多人进入了优秀的学徒期,比如我在周五遇到的那些。能够同时学习和赚钱。双赢。”
[3] “@kamaalrkhan @iTIGERSHROFF 老虎已经赢得了如此多的明星来制作电影”
[4] “@ComfortablySmug 女性的收入只有 23 小时,而男性只有 24 小时。我们需要结束这个国家的小时差距。”
[5] “@ByMikeBaker @GlenBikes 我认为@MayorJenny 想要解决更大的危机,所以她看起来很适合选举!或者他们的捐赠者太多了,他们根据决定计算他们将获得或失去的钱!”
[6]“乌鸦甩掉野马,再次获得全国决赛出场”
[7]“@JaredRBLX 是的,这是我的问题..在我的新建筑中,仅楼梯就超过 10,000 个,需要很长时间才能获得然后我失去了动力或想法我在做什么.. 所以现在在建造之前先存钱” [8] “我所做的只是向往无忧无虑的生活,并梦想轮流赚钱烧钱,制定我致富的策略。我的愿望就像是需要痒痒的抓痕……”

a1

head(a1) [1] "N cs SK nngtt tl No.5 n Lyon, sp c lly so soon ft rhr #A sOp n tr mph.Alw ys shows p th rv nts nd b ttl dh rd, thro gh for r cons ctv thr -s tt rs, rn th t tl 。”
[2] "@K pUK g th r @w lt rsboy_ Pos tvd st nt ons thos lv ng school r ncr s ngly good. M ny go n xc ll nt ppr nt c sh ps s ch s thos I mt on Fr d y. Ablst dy nd rn mon yt th smtm . W nw n." [3] "@km lrkh n @ TIGERSHROFF T grhs rn th tm ch st rdom mkf lm h t"
[4] "@Com t blySm g Wom n only rn 23 ho rs m n's 24. Wnd nd th ho rgpn th的国家。”
[5] "@ByM k B kr @Gl nB ks I th nk @M yorJ nny w nts solv b gg r cr ss 所以 sh 看起来不错!或者 m yb th rs j st om ny 捐助者继续mon y th y'll rn or los bsd on th dcs on!”
[6] “R v ns d mp M st ngs, rn noth rnt on lfnl pp r nc”

标签: rgsub

解决方案


在正则表达式中,\b是“单词边界”,基本上是从字母到非字母的变化(可能是空格、换行符、句尾的标点符号等)。因此,您需要在模式的两侧设置单词边界。

我们还可以做得比for循环更好——用 for OR 分隔每个模式|,您可以一次完成所有替换。

st1 = c("u", "e", "to", "the", "a", "and", "you", "for", "of", "i")

st1b = paste0("\\b", st1, "\\b", collapse = "|") ## adding extra \ for R

gsub(st1b, "", "i went to town indigo")
# [1] " went  town indigo"

这留下了额外的空间,你可以用另一个清理gsub(" +", "", x)


推荐阅读