【发布时间】:2022-11-14 01:51:06
【问题描述】:
我有一个推文数据框。我想确定所有包含至少一个对一组国家/地区的引用的推文。
这些引用可以以各种形式出现。例如,对美国的引用可能写为“美国”、“华盛顿”、“拜登”或其他一些东西。我认为最好的方法是为每个国家/地区创建一个向量,其中包含我正在搜索的每个值:
usid <- c("America", "Washington", "Biden")
rusid <- c("Russia", "Moscow", "Putin")
chnid <- c("China", "Beijing", "Xi jingping")
ids <- c(usid, rusid, chnid)
等等。请注意,这只是一个示例。我有 18 个国家/地区,每个国家/地区都有一个术语向量。
我一直在使用 stringr,因为我认为 str_detect() 函数将是执行此操作的最佳方法。
我试过了:
newdf <- filter(df, str_detect(text, usid))
这将仅返回包含“America”但向量中没有其他值的推文,并且此错误消息:“警告消息:在 stri_detect_regex(string, pattern, negate = negate, opts_regex = opts(pattern)):更长的对象长度不是较短物体长度的倍数"
当我使用:
newdf <- filter(df, str_detect(text, ids))
我得到看似随机的结果和相同的错误消息。
解决上述问题后,我希望能够在 ids 向量中否定某些国家向量。例如,我想在数据框中搜索除美国向量之外的所有国家向量:
newdf <- filter(df, str_detect(text, ids![usid]))
但我不确定这个的语法。
【问题讨论】:
-
您应该使用“过滤器”而不是过滤器
-
哈哈,好收获。不幸的是,这只是我的帖子中的一个错字,而不是我的脚本。已编辑,加油。
-
好的 :D 所以这里我有一个功能可以帮助解决您的问题。首先让 "text" 为 text <- c("America", "B","C", "Germany"),然后您可以使用 newdf <- text %in% usid 检查哪些单词与 usid 匹配。您可以尝试将其与 str_detect 结合使用。我的情况是你得到结果 TRUE FALSE FALSE FALSE 因为 text[1] 匹配“America”
-
抱歉,澄清一下,我在 str_detect 函数中引用的“文本”是我正在过滤的列的名称。