r - 如何在 R 中保留字符串的某些部分

标签 r string data-cleaning

我有一个包含个人及其出生国家/地区的数据集。然而,有些人出生在南斯拉夫、奥地利帝国、普鲁士等存在的时代,因此在数值列中,当前国家位于括号中。如何仅将国家/地区保留在括号中,以便以后可以按国家/地区对数据进行分组?

Person          Birth Country
 Nick         Prussia (Germany)
 Mike             Germany
 Maria            Canada
 Mark          Russian Empire (Poland)         
 Sven             Germany
 Jarek            Poland   

最佳答案

我们可以使用 sub 来提取 ( 之后的非 ) 字符作为捕获组,并在替换中指定反向引用捕获组的 (\\1)

df1$Country <- sub(".*\\(([^)]+)\\).*", "\\1", df1$`Birth Country`)
df1$Country
#[1] "Germany" "Germany" "Canada"  "Poland"  "Germany" "Poland" 

我们匹配的模式是 .* (任何字符),后跟文字 ( (转义 -\\( - as it是元字符),然后将非 ) 的字符捕获为一组 ((...)) ([^)]+),后跟 ) (\\)) 和任何其他字符 (.*)

数据

df1 <- structure(list(Person = c("Nick", "Mike", "Maria", "Mark", "Sven", 
"Jarek"), `Birth Country` = c("Prussia (Germany)", "Germany", 
"Canada", "Russian Empire (Poland)", "Germany", "Poland")),
class = "data.frame", row.names = c(NA, 
-6L))

关于r - 如何在 R 中保留字符串的某些部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64688472/

相关文章:

r - 从 "c(\"a\",\"b\")"格式中获取数据

c# - 通过 string.format 生成的 SQL 查询字符串中的转义字符

java - 如何在 Scala 中比较字符串数组与 JUnit

python - 如何在遵循 pylint 规则的同时格式化长字符串?

Python 选择和计数元素

python - 根据值的计数在数据框中删除列

r - 将 row.names 更改为列

依赖 Shiny 的 R 包给出 RJSONIO 警告

r - 将 Stata 翻译成 R - 重新编码

r - 将所有数据框字符列转换为因子