如何使用包含另一个变量的部分字符串的列表对数据框进行子集化

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