【问题标题】:str_detect, case sensitivity, and mutating a binary variablestr_detect、区分大小写和改变二进制变量
【发布时间】:2022-11-21 05:18:54
【问题描述】:

我目前正在对在线论坛进行一些研究。我有一个包含数千个帖子的数据库,当提到某个词时,我想在特定帖子(这是我的数据集中的一个观察)上创建一个二进制变量。

我想看看发帖者什么时候说孤独,所以我想出了下面的代码,但是当我使用ignore_case = T时总是报错。

library(dplyr)
library(string)

dataset <- dataset %>% 
    mutate(loneliness = ifelse(str_detect(text,"loneliness|blackpilled|lonely"), 1, 0, ignore_case = TRUE))

我也试过:

mutate(loneliness = ifelse(
  str_detect(dataset$text, regex("loneliness|blackpilled|black pill|lonely", ignore_case = TRUE))))

使用它我得到这个错误:缺少参数“no”,没有默认值。

我的代码中缺少什么它不起作用?

【问题讨论】:

  • 如果您查看str_detect 帮助页面,您会发现它没有ignore_case 参数。 (自 2015 年 1.0 版以来就没有了)。您可以使用具有ignore.case 的基础grepl,或者您可以使用stringI::strI_detect(),它允许您使用opts_regex 传递正则表达式参数,或者使用stringr 可以将您的模式包装在regex() 中,它确实使用ignore_case。但是 ifelse 需要 3 个参数,conditionyesno,并且你调用它的条件只有你需要 , 1, 0

标签: r string


【解决方案1】:

您刚刚在基本 R ifelse() 中添加了 ignore_case,这不是该函数的参数。使用 dplyrstringr 可以像这样完美地工作:

Data <- data.frame(text = c('I am lonely','I am happy'))
library(tidyverse)
Data |>
  mutate(
    loneliness = if_else(
      condition = str_detect(text, pattern = "loneliness|blackpilled|lonely"),
      1L, 0L
    )
  )
#>          text loneliness
#> 1 I am lonely          1
#> 2  I am happy          0

创建于 2022-11-20 reprex v2.0.2

亲切的问候

【讨论】:

    【解决方案2】:

    str_detect 之上没有ignore_case 本机它处于错误的位置(在str_detect 功能之外但在ifelse 中)。

    使用regex应该可以

    dataset %>% 
      mutate(loneliness = ifelse(
        str_detect(text, 
          regex("loneliness|blackpilled|lonely", ignore_case = T)
        ), 1, 0))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多