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

How to keep certain parts of a string in R

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

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" 

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

数据

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))

您可以删除左括号和右括号(如果存在)之前的所有内容:

gsub('.*\(|\)', '', df$Birth_Country)
#[1] "Germany" "Germany" "Canada"  "Poland"  "Germany" "Poland"