Объединение двух запросов GREPL с «OR» и добавление «NOT»

У меня есть этот фреймворк:

ID      Description    
1     Tree fell on car 
2     Tree was uprooted
3     While cutting tree, it came down
4     Tree came down

Я пытаюсь искать столбцы в фрейме данных для погодных слов. Я делаю это, используя несколько функций GREPL, разделенных символом «OR». Тем не менее, я хочу объединить две функции grepl, чтобы сказать: «Если описание имеет ЭТО СЛОВО и ЭТО СЛОВО, но не ЭТО СЛОВО, это погода». Если вы посмотрите на приведенный выше фреймворк, можно предположить, что «Дерево спустилось» было бы классифицировано как погода, но «при разрезании дерева оно опустилось» не связано с погодой.

Код, который я попробовал из других ответов на переполнение стека, следующий:

Data$Type<-ifelse(grepl(' Tree|^Tree|- 
Tree|:Tree',Data$DESCRIPTION,ignore.case=TRUE)& 
grepl('^[^Cutting]*[Feel|Fell|Fall|Up Rooted|Uprooted|Came Down| Down|Knocked 
Onto|Caused Damage] 
[^Cutting]*$',Data$DESCRIPTION,ignore.case=TRUE)), "weather", "Not 
Classified")

Но это не работает. Я пытался:

Data$Type<-ifelse(grepl(' Tree|^Tree|- 
Tree|:Tree',Data$DESCRIPTION,ignore.case=TRUE)& grepl('Feel|Fell|Fall|Up 
Rooted|Uprooted|Came Down| Down|Knocked Onto|Caused 
Damage',Data$DESCRIPTION,ignore.case=TRUE) & 
!grepl('Cutting',Data$DESCRIPTION,ignore.case=TRUE)), "Weather", "Not 
Classified")

Я ожидаю этого результата:

ID      Description                      Type
1     Tree fell on car                   "Weather"
2     Tree was uprooted                  "Weather"
3     While cutting tree, it came down   "Non-Weather"
4     Tree came down                     "Weather"

Но это не работает. спасибо

r,

0

Ответов: 2


0

Поскольку у вас есть только два случая (Погода и Не Погода), я думаю, что было бы достаточно использовать grepl только для одного:

df$Type <- sapply(df$Description, 
                  function(x) ifelse(grepl(pattern = 'Tree|fell|^cutting',x = x),'Weather','Non-Weather'))

[1] "Weather"     "Weather"     "Non-Weather" "Weather"   

0

В итоге я просто делал такие вещи, чтобы убедиться, что «Лед» - это погодное слово, но «Создатель».

ifelse(grepl('Ice$| Ice |,Ice |^Ice | Ice,',Data$DESCRIPTION,ignore.case=TRUE) & 
!grepl('Maker',Data$DESCRIPTION,ignore.case=TRUE))
р,
Похожие вопросы