r - 如何删除遵循某种模式的字符串的一部分,但不包括使用 R 的另一个模式?
问题描述
我在 R 中有一个包含人员数据的数据框。字符串的第一部分是全名。每隔一段时间,我就会遇到括号中的昵称。括号中可能还有我不想删除的其他数据。这是我正在使用的一种数据的示例:
Name <- c(
"JOSEPH RYAN SMITH (USRID1)",
"ANDREA J LOPEZ RAMIREZ (USRID2) (CONTRACTOR)",
"TIMOTHY (TIM) JOHNSON (USRID3) (INTERN)",
"JESSICA JENNIFER JONES (USRID4) (CONTRACTOR)",
"WILLIAM (BILLIE) JOEL (USRID5)")
df <- as.data.frame(Name)
我得到:
Name
1 JOSEPH RYAN SMITH (USRID1)
2 ANDREA J LOPEZ RAMIREZ (USRID2) (CONTRACTOR)
3 TIMOTHY (TIM) JOHNSON (USRID3) (INTERN)
4 JESSICA JENNIFER JONES (USRID4) (CONTRACTOR)
5 WILLIAM (BILLIE) JOEL (USRID5)
我只想删除昵称。我注意到一个昵称的不同之处在于它总是在括号中,并且总是跟在一个姓氏之后。括号中包含的所有其他指示符后跟“(”或记录结尾。我尝试删除括号中的字符串,该字符串后跟空格和字符 AZ。
df$Name <- str_remove(df$Name, "[\\(][A-Z]+[\\)][ ][A-Z]")
这删除了姓氏的第一个字母并给了我:
Name
1 JOSEPH RYAN SMITH (USRID1)
2 ANDREA J LOPEZ RAMIREZ (USRID2) (CONTRACTOR)
3 TIMOTHY OHNSON (USRID3) (INTERN)
4 JESSICA JENNIFER JONES (USRID4) (CONTRACTOR)
5 WILLIAM OEL (USRID5)
我也没有成功尝试过“不跟随(”,如下所示:
df$Name <- str_remove(df$Name, "[\\(][A-Z]+[\\)][ ][^\\(]")
我尝试了一些其他方法,这些方法删除了我需要保留的括号中的其他指标。任何帮助表示赞赏。谢谢你。
解决方案
使用正向查找 ( ?=
) 以便匹配姓氏的第一个字母,但不会被删除。
stringr::str_remove(df$Name, "\\([A-Z]+\\)\\s(?=[A-Z])")
#[1] "JOSEPH RYAN SMITH (USRID1)"
#[2] "ANDREA J LOPEZ RAMIREZ (USRID2) (CONTRACTOR)"
#[3] "TIMOTHY JOHNSON (USRID3) (INTERN)"
#[4] "JESSICA JENNIFER JONES (USRID4) (CONTRACTOR)"
#[5] "WILLIAM JOEL (USRID5)"
您也可以使用以下命令在基础 R 中编写sub
:
sub('\\([A-Z]+\\)\\s(?=[A-Z])', '', df$Name, perl = TRUE)
推荐阅读
- laravel - 命令方法中的 Laravel 依赖注入
- flutter - Flutter:如何在 Flutter 中使用 Navigator.push 在 GridView.builder 的每个索引中设置可点击系统
- regex - 如何使用 sed 从变量中替换特定字符串?
- spss - UNIANOVA 的 OMS 不适用于估计边际均值?
- c++ - 为什么动态数组必须以几何方式增加它们的容量才能获得 O(1) 摊销的 push_back 时间复杂度?
- c++ - gltf 没有在皮肤中指定骨架值是什么意思?
- visual-studio - 如何阻止 Visual Studio 自动扩展代码区域?
- ruby-on-rails - 为什么需要前端存储 Firebase 令牌?
- discord - 当在 discord.js 中触发 guildCreate 事件时,有没有办法判断它是来自加入服务器还是服务器变得可用?
- visual-studio-code - 在 JavaScript 的 vscode 默认格式化程序中,如何避免大括号前的空格?