删除特殊字符R dplyr后面的字符



我试图在一个特殊字符(:-)后删除几个字母。

我试过这样做,但结果并不令人满意:

test2 <- test %>%
mutate(p1 = substr(label, 1, 2)) 
mutate(p2 = sub("^[^-*]","",label))

我想做一个ifelse方法。如果在前两个字母之后没有-:,那么就保持原样。如果在前两个字母之后有一个-,那么删除这个-和它旁边的字母(空格前的1、2或3)。如果在前两个字母后面有:,则删除它并保持原样。

test <- data.frame(label=c('BR-SC Santa Catarina', 
'BR-SP São Paulo', 
'MM-18 Nay Pyi Taw', 
'PS-TKM Tulkarm', 
'HK Yau Tsim Mong',
'JO: Ajlūn',
'RU-ALT Altajskij kraj',
'RW-F Kibuye',
'EG-KFS Kafr el-Sheikh'))
final <- data.frame(label=c('BR Santa Catarina', 
'BR São Paulo', 
'MM Nay Pyi Taw', 
'PS Tulkarm', 
'HK Yau Tsim Mong',
'JO Ajlūn',
'RU Altajskij kraj',
'RW Kibuye',
'EG Kafr el-Sheikh'))

您可以使用-

sub('[-:]\w+|:', '', test$label, perl = TRUE)
#[1] "BR Santa Catarina" "BR São Paulo"      "MM Nay Pyi Taw"   
#[4] "PS Tulkarm"        "HK Yau Tsim Mong"  "JO Ajlūn"         
#[7] "RU Altajskij kraj" "RW Kibuye"         "EG Kafr el-Sheikh"

使用tidyverse-

library(dplyr)
library(stringr)
test %>% mutate(label1 = str_remove(label, '[-:]\w+|:'))

它删除后面跟着-:的单词,因为我们使用的是sub/str_remove,它只会删除第一个出现的单词。

另一个方法:

test <- data.frame(label=c('BR-SC Santa Catarina', 
'BR-SP São Paulo', 
'MM-18 Nay Pyi Taw', 
'PS-TKM Tulkarm', 
'HK Yau Tsim Mong',
'JO: Ajlūn',
'RU-ALT Altajskij kraj',
'RW-F Kibuye',
'EG-KFS Kafr el-Sheikh'))
a = strsplit(test$label, ' ')
for(i in 1:length(a)){
a[[i]][1]= substr(a[[i]][1],1,2)
a[[i]]= paste(a[[i]], collapse = ' ')
}

final = data.frame( label=unlist(a))
final

输出:

label
1 BR Santa Catarina
2      BR São Paulo
3    MM Nay Pyi Taw
4        PS Tulkarm
5  HK Yau Tsim Mong
6          JO Ajlūn
7 RU Altajskij kraj
8         RW Kibuye
9 EG Kafr el-Sheikh

trygsub

library(dplyr)
test |> mutate(label = gsub("(:|-)(.*?)\s"," ",label))

我们可以使用str_remove

library(stringr)
str_remove(test$label, "-\w+")
[1] "BR Santa Catarina" "BR São Paulo"      "MM Nay Pyi Taw"    "PS Tulkarm"        "HK Yau Tsim Mong"  "JO: Ajlūn"         "RU Altajskij kraj" "RW Kibuye"        
[9] "EG Kafr el-Sheikh"

相关内容

  • 没有找到相关文章

最新更新