исключение элементов FALSE из символьного вектора с использованием логического вектора - PullRequest
2 голосов
/ 28 октября 2010

Мне удается сделать следующее:

stuff <- c("banana_fruit","apple_fruit","coin","key","crap")
fruits <- stuff[stuff %in% grep("fruit",stuff,value=TRUE)]

, но я не могу выбрать не очень полезный материал с обычными мыслями и идеями, такими как

no_fruit <- stuff[stuff  %not in% grep("fruit",stuff,value=TRUE)]
#or
no_fruit <- stuff[-c(stuff  %in% grep("fruit",stuff,value=TRUE))]

не работаетПоследний просто игнорирует "-"

Ответы [ 3 ]

4 голосов
/ 28 октября 2010
> stuff[grep("fruit",stuff)]
[1] "banana_fruit" "apple_fruit" 
> stuff[-grep("fruit",stuff)]
[1] "coin" "key"  "crap"

Вы можете использовать только отрицательные индексы с числовыми / целочисленными векторами, не логично, потому что:

> -TRUE
[1] -1

Если вы хотите отменить логический вектор, используйте !:

> !TRUE
[1] FALSE
2 голосов
/ 28 октября 2010

Как упоминал Джошуа: вы не можете использовать - для отрицания своего логического индекса;вместо этого используйте !.

stuff[!(stuff %in% grep("fruit",stuff,value=TRUE))]

См. также пакет stringr для подобных вещей.

stuff[!str_detect(stuff, "fruit")]
1 голос
/ 05 февраля 2012

В grep также есть параметр invert, который делает то, что вы ищете:

> stuff <- c("banana_fruit","apple_fruit","coin","key","crap")
> fruits <- stuff[stuff %in% grep("fruit",stuff,value=TRUE)]
> fruits
[1] "banana_fruit" "apple_fruit" 
> grep("fruit", stuff, value = T)
[1] "banana_fruit" "apple_fruit" 
> grep("fruit", stuff, value = T, invert = T)
[1] "coin" "key"  "crap"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...