【问题标题】:use "gsub" on a string variable depending on the values assumed by another variable根据另一个变量假定的值在字符串变量上使用“gsub”
【发布时间】:2018-02-11 14:56:11
【问题描述】:

我拥有丰富的此类报纸标题数据框:

ID 标题类别
10516 § vasco rossi le donne e le sue paure pensavo di morire molto prima § Musica
12489 § rossi : il Concerto più visto della settimana § Musica
12490 § rossi deluso e amareggiato cosa farà il dottore dopo valencia § 运动
12494 § valentino rossi il ricorso al tas la decisione nel pomeriggio di giovedì novembre § 运动
12502 § valentino rossi rompe il silenzio il duro messaggio a jorge lorenzo § 运动
12504 § pazza idea rossi e marquez a valencia § 首页
33006 § dopo l errore con marquez rossi Merita di perdere il mondiale § 首页
59689 § rossi bando mise su livorno chiude fase importante per reindustrializzazione § Lavoro

现在我想准确识别标题中出现的各种“Rossi”(在意大利语中,Rossi 是一个很常见的姓氏)。
当名字和姓氏都存在时,问题很容易解决:

NEWS2_df$Title NEWS2_df$Title

但是当只有姓氏时,当文章类别为“音乐”时,我希望“Rossi”变为 Vasco_Rossi,当文章类别为“运动”时,我希望变为 Valentino_Rossi。
基本上根据另一个变量假定的值在字符串变量上使用“gsub”
谁能告诉我该怎么做?

最后,当文章类别为“Home”时,可以识别文章的主题(并将名称更改为 Valentino_Rossi / Vasco_Rossi),同时考虑到标题中其他词的存在(例如“Marquez” -> Valentino_Rossi “协奏曲”-> Vasco_Rossi)
有没有人能帮帮我?
谢谢

【问题讨论】:

    标签: r string gsub


    【解决方案1】:

    首先,您不需要lapply ——gsub 已经矢量化了。

    要仅对 df 的一部分执行此操作,只需子集:

    NEWS2_df$Title[NEWS2_df$Category == "Sport"] <- gsub("\b(?<!_)rossi\b",
                "valentino_rossi", NEWS2_df$Title[NEWS2_df$Category == "Sport"], 
                 perl=TRUE)
    

    在将“valentino rossi”替换为下划线版本后执行此操作,这样很容易识别那些没有名字的人。

    与 home 相同,只需为所有有助于消除歧义的词添加 grepls:

    subset <- NEWS2_df$Category == "Home" & grepl("marquez", NEWS2_df$Title)
    
    NEWS2_df$Title[subset] <- gsub("\b(?<!_)rossi\b", "valentino_rossi", 
                                   NEWS2_df$Title[subset]], perl=TRUE)
    

    【讨论】:

    • 好的,克里斯托夫,工作!并且一旦删除“lapply”gsub 就会快得多
    猜你喜欢
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-13
    • 1970-01-01
    • 2022-01-10
    相关资源
    最近更新 更多