如何使用str_detect过滤R中的顶级域?

时间:2018-08-07 15:27:56

标签: r regex filtering stringr

这非常简单,但是我不太清楚如何使此代码正常工作。也许更好地了解正则表达式可以帮助我。

我有一个URL列表,其中许多来自美国以外国家/地区的域名。我想过滤出适合特定国家/地区代码列表的内容。我的列表基于以下表格:https://www.countries-ofthe-world.com/TLD-list.html

拿起原始的URL列表,我将它们分隔开,以便一列只是顶级域名的结尾(.com,.net等。)

因此,我然后希望R遍历列表,并检测从该列表中获取的所有国家/地区网址,并将其过滤掉。但是,它似乎没有我希望的那样。

filtered_list <- df %>% filter(!str_detect(domain_ending, country$endings))

这个想法是,它将采用所有域名的结尾,并保留与我列表中不匹配的那些结尾。我已经测试了该代码的许多变体,但是我不太清楚为什么要删除一些.coms和其他甚至不在我列表中的.coms并保留.de和我知道的其他应该过滤的东西。

编辑:以下是示例网站上的一些虚构变体,以帮助提供代码

list <- c("Facebook.com", "Twitter.de", "Google.at", "Youtube.cn", "Instagram.fi", "Linkedin.com", "Wordpress.org", "Pinterest.au", "Wikipedia.org")

假设我想获取该列表并从上面链接的第一个表中过滤掉列表中显示的所有结尾,我将如何处理?我的代码在某处有问题,因此也许这个例子可以提供帮助。我的变量被分类为字符。这可能会有所作为?

Edit2:编写了一个CSV文件并将其重新上传到R中,现在可以使用了。很抱歉浪费大家的时间。谢谢大家的帮助。

2 个答案:

答案 0 :(得分:0)

您可以使用which()过滤出以下网址:

co_grp = df.drop_duplicates('Company').set_index('Company')['GroupNumber']
grp_cos = df.groupby('GroupNumber')['Company'].apply(list)

res = df[df['Company'].isin(grp_cos[co_grp['CC']])]

print(res)

   S.no Company      City Vendor GroupNumber    Category
0     1      AA     Delhi  Micro     9188-SC  BBRNC011TR
1     2      BB     Delhi  Micro     9188-SC  BBRNC011TR
2     3      CC  Banglore  Micro     9188-SC  BBRNC011TR
3     4      DD  Banglore  Micro     9188-SC  BBRNC011TR
4     5      EE    Mumbai  Micro     9188-SC  BBRNC011TR

答案 1 :(得分:0)

一种解决方法是用管道创建图案。

listing <- c("Facebook.com", "Twitter.de", "Google.at", "Youtube.cn", 
          "Instagram.fi", "Linkedin.com", "Wordpress.org", "Pinterest.au", "Wikipedia.org")

endings <- c(".fi", ".au", ".uk", ".at", ".de", ".cn")

pattern <- str_c(endings, collapse = '|')
grep(pattern, listing, value=T)

## > pattern
## [1] ".fi|.au|.uk|.at|.de|.cn"

## > grep(pattern, listing, value=T)
## [1] "Twitter.de"   "Google.at"    "Youtube.cn"   "Instagram.fi" "Pinterest.au"