如果字符串包含单词列表中的任何一个,R 每行返回 true 或 false

2023-11-24

我有一个包含一列字符串的数据集:

text <- c('flight cancelled','dog cat','coach travel','car bus','cow sheep',' high bar')
transport <- 0

 df <- data.frame(text,transport)

对于每一行,如果字符串“text”包含多个单词中的任何一个,我想返回 1,否则返回 0。我的问题是我能想到的唯一方法是使用 for 循环。有没有更有效的方法来做到这一点?我的数据集非常大,因此 for 循环需要永远运行

words<- 'flight|flights|plane|seats|seat|travel|time|coach'

for (i in 1:6){
   df$transport[i] <- ifelse(any(grepl(words,(str_split(as.character(df$text[i]), " ")))) == TRUE,1,0)
 }

returns:

              text transport
1 flight cancelled         1
2          dog cat         0
3     coach travel         1
4          car bus         0
5        cow sheep         0
6         high bar         0

您可以使用words and df$text直接进入grep找到要设置为 1 的行。

df$transport[grep(words, df$text)] <- 1

另一种方法是使用grepl并使用+ to get 0 and 1:

+grepl(words, df$text)
#[1] 1 0 1 0 0 0

如果只需要匹配整个单词,则需要将它们包围起来\b来匹配边界。

+grepl(paste0("\\b(", words, ")\\b"), df$text)
#[1] 1 0 1 0 0 0

基准:

bench::mark(
         grepl = +grepl(words, df$text)
       , "grepl\\b" = +grepl(paste0("\\b(", words, ")\\b"), df$text)
       , greplPerl = +grepl(words, df$text, perl = TRUE)
       , stringr = +stringr::str_detect(df$text, words)
       , stringi = +stringi::stri_detect_regex(df$text, words)
       , like = +data.table::like(df$text, words)
       )
#  expression     min  median `itr/sec` mem_alloc `gc/sec` n_itr  n_gc total_time
#  <bch:expr> <bch:t> <bch:t>     <dbl> <bch:byt>    <dbl> <int> <dbl>   <bch:tm>
#1 grepl      10.61µs 11.61µs    62577.        0B     6.26  9999     1    159.8ms
#2 grepl\b    15.29µs 16.31µs    59343.        0B    11.9   9998     2    168.5ms
#3 greplPerl    5.5µs   5.9µs   164148.        0B     0    10000     0     60.9ms
#4 stringr    10.01µs 10.78µs    88661.        0B    17.7   9998     2    112.8ms
#5 stringi     7.48µs  7.93µs   123578.        0B    12.4   9999     1     80.9ms
#6 like       11.83µs 12.66µs    77189.        0B     7.72  9999     1    129.5ms

在这种情况下使用grepl from base设置时perl = TRUE是最快的方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果字符串包含单词列表中的任何一个,R 每行返回 true 或 false 的相关文章

  • 如何从 Fortran 调用 R 函数?

    根据http gallery rcpp org articles r function from c http gallery rcpp org articles r function from c Rcpp 允许用户从 C 调用 R 函数
  • R中的一元加/减是什么?

    来自 R 的详细信息部分Syntax http stat ethz ch R manual R patched library base html Syntax html帮助页面 定义了以下一元和二元运算符 他们被列出 在优先级组中 从最高
  • 使用 purrr 迭代替换数据帧列中的字符串

    我想用purrr使用以下命令在数据框列上迭代运行多个字符串替换gsub 功能 这是示例数据框 df lt data frame Year 2019 Text c rep a aa 5 rep a bb 3 rep a cc 2 gt df
  • Pandas:向量化局部范围操作([i:i+2] 行的最大值和总和)

    我希望在数据帧中的每一行的局部范围内进行计算 同时避免速度缓慢for环形 例如 对于下面数据中的每一行 我想找到未来 3 天内 包括当天 的最高气温以及未来 3 天内的总降雨量 Day Temperature Rain 0 30 4 1 3
  • 使用 pracma::findpeaks 识别持续峰值

    我的语法有问题peakpat内的选项findpeaks内的函数pramcaR 包 v 2 1 1 我使用的是 R 3 4 3 x64 Windows 我希望该函数能够识别可能有两个重复值的峰值 并且我相信该选项peakpat这就是我能做到的
  • 多功能测试仪替代 system.time

    我已经看到 我认为是这样 使用了类似于 system time 的函数 它可以同时评估多个函数的时间并输出一个输出 我不记得它是什么 并且用我正在使用的术语进行互联网搜索并没有得到我想要的响应 有人知道我正在谈论的功能的名称 位置吗 你想要
  • C++:初始化静态字符串成员

    我在 C 中初始化静态字符串成员时遇到一些问题 我有几个类 每个类都包含几个表示 id 的静态字符串成员 当我通过调用静态函数初始化变量时 一切都很好 但是 当我想为一个变量分配另一个变量的值时 它仍然保留空字符串 这段代码有什么问题 st
  • 将数据框中的每个 x 个字符拆分为字符串

    我知道这里有一些关于每隔一段时间分割一个字符串的答案nth字符 例如this one https stackoverflow com questions 23208490 split each character in r and this
  • 如何用 pandas 中两个日期之间计算的值填充列?

    我有这个数据框 Date Position TrainerID Win 2017 09 03 4 1788 0 0 wins 1 race 2017 09 16 5 1788 0 0 wins 2 races 2017 10 14 1 17
  • 在 R 中绘制 Likert 变量的堆积条形图

    假设我有一个如下所示的数据框 P Q1 Q2 1 1 4 1 2 2 3 4 3 1 1 4 其中的列告诉我哪个人相应地回答了问题 q1 q2 中的哪一个 这些问题需要按照 4 分李克特量表进行回答 例如 批准 表示 1 稍微批准 表示 2
  • 在字符串中间添加一个字符

    可能有一个简单的解决方案可以解决这个问题 但会引起面部表情 我将时间存储为 4 个字符长的字符串 即 1300 我试图将该字符串显示为 13 00 我觉得必须有一个比我现在正在做的更优雅的解决方案 我目前有 startTime get fi
  • 在 R 格子包中微调点图

    我正在尝试为不同的数据集和不同的算法绘制一堆 ROC 区域 我有三个变量 方案 指定所使用的算法 数据集 是正在测试算法的数据集 以及 Area under ROC 我正在 R 中使用lattice库 命令如下 点图 方案 Area und
  • Purrr::map_df() 删除 NULL 行

    使用时purrr map df 我偶尔会传递一个数据框列表 其中一些项目是NULL 当我做 map df 返回行数少于原始列表的数据框 我想发生的事情是这样的map df calls dplyr bind rows 它忽略了NULL价值观
  • R 中的列乘以子字符串

    假设我有一个数据框 其中包含多个组件及其在多个列中列出的属性 并且我想对这些列运行多个函数 我的方法是尝试将其基于每个列标题中的子字符串 但我无法弄清楚如何做到这一点 下面是数据框的示例 Basket F Type 1 F Qty 1 F
  • ggplot2 geom_密度和geom_histogram在一个图中

    如何制作一个所有条形加起来为 1 的直方图 并在适合的上方添加一个密度层 set seed 1234 df lt data frame sex factor rep c F M each 200 weight round c rnorm 2
  • 只读取选定的列

    谁能告诉我如何仅读取下面每年数据的前 6 个月 7 列 例如使用read table Year Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 2009 41 27 25 31 31 39 2
  • Python:字符串不会转换为浮点数[重复]

    这个问题在这里已经有答案了 我几个小时前写了这个程序 while True print What would you like me to double line raw input gt if line done break else f
  • ddply 和aggregate 之间的区别

    有人可以通过以下示例帮助我了解聚合和 ddply 之间的区别 数据框 mydat lt data frame first rpois 10 10 second rpois 10 10 third rpois 10 10 group c re
  • 文本挖掘 pdf 文件/词频问题

    我正在尝试挖掘一篇具有丰富 pdf 编码和图表的文章的 pdf 我注意到 当我挖掘一些 pdf 文档时 我得到的高频词是 phi taeoe toe sigma gamma 等 它与某些 pdf 文档配合良好 但与其他文档配合使用时却得到这
  • 旋转 Markdown 的表格 pdf 输出

    我想将 pdf 上的表格输出旋转 90 度 我正在使用 Markdown 生成报告并kable循环显示表格 如果可以的话我想继续使用kable因为还有很多其他依赖于它的东西我没有包含在这个 MWE 中 这是一个简单的例子 使用iris数据集

随机推荐