【问题标题】:Replace multiple elements替换多个元素
【发布时间】:2021-09-29 00:35:39
【问题描述】:

我需要用 NA 替换多个元素。

这是我的数据:

  data<-c("?","acaova","acapin","agrsto","alsaur","alsaurM","apeintM","arichi", "artabs","auschi","auschiM","auspen","berdar","berser","bertri","brocat", "brocol","brocolM","calpol","carand","cartho","cerarv","chucol","chucolM", "cirvul","claper","colbif","colbifM","colhys","corsel","corseo","crecap", "crecapM","cynech","d","d3","dacglo","diojun","diojunM","dipdes", "dros","elyang","elyangM","epibra","equbog","erocic","erocicM","erypan", "g","galapa","galhyp","ganu","ganuM","gaupoe","gerses","gM", "gper","gperM","h1","h1M","h2","hd3","hd5","hollan", "hydcha","hyppoe","hyprad","hypradM","leuvul","lotten","luppolM","nas", "nasM","naspoe","notant","notantM","papspe","plalan","plalanM","poapra", "poapraM","poasec","poasecM","potchi","pruavi","pruvul","ribcuc","rosrub", "rosrubM","rosrubP","schpat","schpatP","sdjab","senfil","solchi","t10h3", "t10h4","t10h6","t10h7","t10h8","t10h9","t2h8","tarofi","tr,notant" "tripra","tripraM","trirep","urture","usnbar","vertha","vicnig")

而且我需要用 NA 替换许多元素。我发现这样做的唯一方法是使用以下代码:

  data[data=="b"]<-NA
  data[data=="r"]<-NA
  data[data=="ro"]<-NA
  data[data=="sd"]<-NA
  data[data=="t"]<-NA
  data[data=="tr"]<-NA

有没有更简单的方法?

【问题讨论】:

  • 你可以像data[data %in% c('b', 'r', 'ro', 'sd', 't', 'tr')]一样使用%in%
  • @AnilGoyal 也许只是我的直觉,但我认为 OP 想要 NA 填充 start 与这些前缀的值,而不是完全匹配它们。其中许多条目甚至没有出现在 OP 的数据中。
  • @TimBiegeleisen,但如果是这样,rro 的逻辑有何不同?与ttr 相同。 OP只能澄清。但是,如果希望完全匹配某些项目%in% 似乎最容易在那里
  • 我看到 rro 并把它写成重叠的要求,也许是匆忙写的。
  • 谢谢@AnilGoyal,无论如何正确的代码应该是: data[!data %in% c('b', 'r', 'ro', 'sd', 't', 'tr ')]

标签: r replace match


【解决方案1】:

您可以使用grepl 和正则表达式交替:

terms <- c("b", "r", "ro", "sd", "t", "tr")
regex <- paste0("^(?:", paste(terms, collapse="|"), ")")
data[grepl(regex, data)] <- NA
data

[1] "?"       "acaova"  "acapin"  "agrsto"  "alsaur"  "alsaurM" "apeintM"
[8] "arichi"  "artabs"  "auschi"  "auschiM" "auspen"  NA        NA       
[15] NA        NA        NA        NA        "calpol"  "carand"  "cartho" 
[22] "cerarv"  "chucol"  "chucolM" "cirvul"  "claper"  "colbif"  "colbifM"
[29] "colhys"  "corsel"  "corseo"  "crecap"  "crecapM" "cynech"  "d"      
[36] "d3"      "dacglo"  "diojun"  "diojunM" "dipdes"  "dros"    "elyang" 
[43] "elyangM" "epibra"  "equbog"  "erocic"  "erocicM" "erypan"  "g"      
[50] "galapa"  "galhyp"  "ganu"    "ganuM"   "gaupoe"  "gerses"  "gM"     
[57] "gper"    "gperM"   "h1"      "h1M"     "h2"      "hd3"     "hd5"    
[64] "hollan"  "hydcha"  "hyppoe"  "hyprad"  "hypradM" "leuvul"  "lotten" 
[71] "luppolM" "nas"     "nasM"    "naspoe"  "notant"  "notantM" "papspe" 
[78] "plalan"  "plalanM" "poapra"  "poapraM" "poasec"  "poasecM" "potchi" 
[85] "pruavi"  "pruvul"  NA        NA        NA        NA        "schpat" 
[92] "schpatP" NA        "senfil"  "solchi"  NA        NA        NA       
[99] NA        NA        NA        NA        NA        NA        "notant" 
[106] NA        NA        NA        "urture"  "usnbar"  "vertha"  "vicnig"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-05
    • 2018-07-23
    • 1970-01-01
    • 2021-03-03
    • 1970-01-01
    • 2015-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多