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