我有一个包含一列字符串的数据集:
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
最佳答案
您可以使用 words
和 df$text
直接在 grep
找到要设置为 1 的行。
df$transport[grep(words, df$text)] <- 1
关于如果字符串包含任何单词列表,则 R 每行返回 true 或 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57074127/