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