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

标签 r string dataframe

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

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)
 }

返回:
              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

最佳答案

您可以使用 wordsdf$text直接在 grep找到要设置为 1 的行。

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

关于如果字符串包含任何单词列表,则 R 每行返回 true 或 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57074127/

相关文章:

string - UVa_11151(最长回文)

java - 将字符串转换为数组

javascript - 字符串元素和对象键值

r - 如何将 R 从 3.x 更新到 4.x?我应该这样做吗?

r - 如何拆分没有定义分隔符的数据框列

r - Knit 和 R markdown 文档(带变音符号)

python - 如何计算 Pandas 中每个唯一值的出现次数

r - 如何在R中的Y = 0上对齐x轴?

r - 根据r中的多列查找数据框中的重复行

python - 如何根据值的频率拆分 pandas 数据框