【问题标题】:How to use str_detect to filter top level domains in R?如何使用 str_detect 过滤 R 中的顶级域?
【发布时间】:2018-08-07 15:27:55
【问题描述】:

这相当简单,但我不知道如何使这段代码工作。可能更好地了解正则表达式会对我有所帮助。

我有一个 URL 列表,其中许多来自属于美国以外国家/地区的域。我想过滤掉符合特定国家代码列表的那些。我的列表基于此处找到的表格:https://www.countries-ofthe-world.com/TLD-list.html

根据我的原始 URL 列表,我将它们分开,这样一列将只是顶级域结尾(.com、.net 等)。

然后我希望 R 浏览我的列表并检测我从该列表中获取的所有国家/地区 URL 并将它们过滤掉。然而,它似乎并没有像我希望的那样工作。

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

这个想法是,它将采用所有域结尾并保留与我列表中的不匹配的那些。我已经测试了该代码的一系列变体,但我无法完全弄清楚为什么它会删除一些 .com 和其他甚至不在我的列表中的文件,并保留 .de 和其他我知道应该被过滤的文件。

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

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

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

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

【问题讨论】:

  • 您可以发布数据样本吗?如果您发布reproducible example,这几乎肯定是有人可以帮助解决的问题
  • 我无法发布这些 URL 的示例,因为它们是用于工作的。但是任何 URL 列表都可以用于此代码。像这样moz.com/top500

标签: r regex filtering stringr


【解决方案1】:

你可以使用which()来过滤掉这些url:

filtered_list <- df[which(!df$domain_ending%in% country$endings),]

【讨论】:

  • 此代码也不起作用。我不明白为什么它没有,因为它似乎应该。我正在添加一些示例,以便我们可以解决此问题: 网站:'listing
【解决方案2】:

解决的一种方法是使用管道创建一个模式。

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"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 2016-01-11
    • 2014-05-24
    • 2019-06-07
    • 1970-01-01
    • 2017-11-29
    相关资源
    最近更新 更多