如何使用包含另一个变量的部分字符串的列表对数据框进行子集化
How to subset dataframe using list that includes partial strings of another variable
我有一个带有变量的数据集,我们称它为 a,它显示国家对。我想根据欧盟国家是否是变量 a 中的国家之一来创建一个子集。我想使用列表来做到这一点,这样 R 就可以遍历变量 a 并保留匹配的变量。
df <- data.frame(a = c('Albania Canada', 'Croatia USA', 'Mexico Egypt', 'Switzerland Hungary', 'Lithuania Indonesia'),
b = c(1, 2, 3, 4, 5))
EU <- c("Austria", "Belgium", "Bulgaria", "Croatia", "Czech Republic", "Denmark", "Estonia", "Finland", "France", "Germany", "Greece", "Hungary", "Ireland", "Italy", "Lativa", "Lithuania", "Luxembourg", "Malta", "Netherlands", "Poland", "Portugal", "Romania", "Slovakia", "Slovenia", "Spain", "Sweden")
我已经看到子集化工作使用:
mySpecies <-c("versicolor","virginica" )
iris[iris$Species %in% mySpecies,]
但是,这需要完全匹配,而我想在我的情况下它需要与部分字符串匹配。 grepl 有什么用吗?我是 R 新手,希望得到一些帮助!
你走对了,grepl
是你的朋友。这样您就可以使用这些国家/地区,paste
它们一起折叠在 或 |
.
上
然后,使用子集
EU_p <- paste(EU, collapse='|')
subset(df, grepl(EU_p, a))
# a b
# 2 Croatia USA 2
# 4 Switzerland Hungary 4
# 5 Lithuania Indonesia 5
或如您使用方括号指出的那样
df[grepl(EU_p, df$a), ]
# a b
# 2 Croatia USA 2
# 4 Switzerland Hungary 4
# 5 Lithuania Indonesia 5
结果是 df
的任意行包含 EU
向量的至少一个国家,因为按原样的模式不区分位置。
数据:
df <- structure(list(a = c("Albania Canada", "Croatia USA", "Mexico Egypt",
"Switzerland Hungary", "Lithuania Indonesia"), b = c(1, 2, 3,
4, 5)), class = "data.frame", row.names = c(NA, -5L))
我有一个带有变量的数据集,我们称它为 a,它显示国家对。我想根据欧盟国家是否是变量 a 中的国家之一来创建一个子集。我想使用列表来做到这一点,这样 R 就可以遍历变量 a 并保留匹配的变量。
df <- data.frame(a = c('Albania Canada', 'Croatia USA', 'Mexico Egypt', 'Switzerland Hungary', 'Lithuania Indonesia'),
b = c(1, 2, 3, 4, 5))
EU <- c("Austria", "Belgium", "Bulgaria", "Croatia", "Czech Republic", "Denmark", "Estonia", "Finland", "France", "Germany", "Greece", "Hungary", "Ireland", "Italy", "Lativa", "Lithuania", "Luxembourg", "Malta", "Netherlands", "Poland", "Portugal", "Romania", "Slovakia", "Slovenia", "Spain", "Sweden")
我已经看到子集化工作使用:
mySpecies <-c("versicolor","virginica" )
iris[iris$Species %in% mySpecies,]
但是,这需要完全匹配,而我想在我的情况下它需要与部分字符串匹配。 grepl 有什么用吗?我是 R 新手,希望得到一些帮助!
你走对了,grepl
是你的朋友。这样您就可以使用这些国家/地区,paste
它们一起折叠在 或 |
.
然后,使用子集
EU_p <- paste(EU, collapse='|')
subset(df, grepl(EU_p, a))
# a b
# 2 Croatia USA 2
# 4 Switzerland Hungary 4
# 5 Lithuania Indonesia 5
或如您使用方括号指出的那样
df[grepl(EU_p, df$a), ]
# a b
# 2 Croatia USA 2
# 4 Switzerland Hungary 4
# 5 Lithuania Indonesia 5
结果是 df
的任意行包含 EU
向量的至少一个国家,因为按原样的模式不区分位置。
数据:
df <- structure(list(a = c("Albania Canada", "Croatia USA", "Mexico Egypt",
"Switzerland Hungary", "Lithuania Indonesia"), b = c(1, 2, 3,
4, 5)), class = "data.frame", row.names = c(NA, -5L))