我试图在一个特殊字符(:
或-
)后删除几个字母。
我试过这样做,但结果并不令人满意:
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"