【问题标题】:Checking a list of words in a column检查列中的单词列表
【发布时间】:2020-09-11 17:26:36
【问题描述】:

我在 tidyverse 中有以下代码,并在 words.xlsx 中有单词列表,例如: 你好 世界 程序 数据 分析

v1 = read_excel('words.xlsx') %>% 
     mutate(words = tolower(words))%>%
     pull(1)
for(v in v1){
data1 = data1 %>%
mutate(!! v := as.integer(heading %like% v))
}

我想编辑这段代码,这样我得到的不是整数,而是在每个字符串中找到的实际单词(用逗号分隔),就像在图像中

【问题讨论】:

  • 您能否添加一个可重现的示例并在此基础上显示预期输出?
  • 它添加了一列,但也有重复的列,例如你好,你好,世界
  • 您应该在示例中添加该信息以及所有此类边缘情况。我已更新答案以仅获取唯一值。此外,您不应使用图像共享数据,请参阅此处了解如何给出可重现的示例stackoverflow.com/questions/5963269
  • 谢谢!有效。我尝试使用 v2 重复该过程以获取另一列,但出现错误: mutate_(.data, .dots = compat_as_lazy_dots(...)) 中的错误:缺少参数“.data”,没有默认值
  • 你可以从paste0中删除\\b,即sapply(stringr::str_extract_all(data1$heading, paste0(v1,collapse = '|')), function(x) toString(unique(x)))

标签: r regex tidyverse


【解决方案1】:

您可以粘贴v1 中带有单词边界的所有单词,并使用str_extract_all 提取v1 中存在于data1$heading 中的任何单词。 str_extract_all 将返回单词列表,我们可以使用 sapply 将它们作为一个连接字符串获取。

sapply(stringr::str_extract_all(data1$heading, 
    paste0('\\b', v1, '\\b', collapse = '|')), function(x) toString(unique(x)))

【讨论】:

    猜你喜欢
    • 2018-04-21
    • 1970-01-01
    • 1970-01-01
    • 2020-01-25
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    • 2018-01-08
    • 1970-01-01
    相关资源
    最近更新 更多