создать флаг на основе значений строки в grep () - PullRequest
0 голосов
/ 07 июня 2018

У меня есть 10-строчный фрейм данных о potatoes, и мне нужно пометить их в соответствии с пунктуацией, содержащейся в tweet (вопросительные знаки или восклицательные знаки).Функция grep будет возвращать номера строк, где появляются эти символы:

grep("\\?", potatoes$tweet)
grep("!", potatoes$tweet)

Я пытался создать переменную флага question с mutate в dplyr, как показано ...

potatoes$question <- NA
potatoes <- mutate(potatoes, question = +row_number(grep("\\?", potatoes$tweet)))

Error in mutate_impl(.data, dots) : 
Column `question` must be length 10 (the number of rows) or one, not 3

Я также рад рассмотреть более элегантные решения, чем кондиционирование на выходе grep.Любая помощь приветствуется!

1 Ответ

0 голосов
/ 07 июня 2018

Мы можем использовать grepl вместо grep, так как grep возвращает индекс / позицию, где происходит совпадение, тогда как grepl возвращает логический vector, где TRUE обозначает соответствующий элемент, а FALSE не соответствует.Его можно использовать как флаг

i1 <- grepl("!", potatoes$tweet)

, и если нам нужно перейти на номера строк,

potatoes$question <- i1 * seq_len(nrow(potatoes$sweet))

Аналогично, grep с индексом строки можно использовать дляназначение

i2 <- grep("!", potatoes$tweet)
potatoes$question[i2] <- seq_len(nrow(potatoes))[i2]
...