2011-12-26 4 views
8

Используя следующие два R-вектора, я хочу извлечь подмножество valMe с использованием логических значений в boolMe. Кроме того, я хотел бы иметь два возможных выхода: один из которых имеет значения FALSE в boolMe от valMe и один, где значения FALSE заменены на NA. Далее иллюстрация того, что я хочу сделать в коде:Подмножество вектора с использованием другого булева вектора в R

ввода

boolMe<-c(FALSE, TRUE, TRUE, TRUE, FALSE, TRUE) 
valMe<-1:6 

Предназначен вывода

NA 2 3 4 NA 6 

или

2 3 4 6 
+0

В python я бы сделал это примерно так: '>>> a = [False, True, False, False, False, False] >>> b = [10, 11, 12, 13, 14, 15] >>> [bb for (aa, bb) в zip (a, b), если aa] [11] ' – hhh

+2

В' python3', 'import itertools; list (itertools.compress (b, a)) ' – kev

ответ

11

Вы можете непосредственно индекс valMe с помощью оператора [:

> valMe[boolMe] 
[1] 2 3 4 6 

можно найти в разделе 2.7 of the intro manual более подробно.

7

Точно так же, если вы хотите Nas:

> valMe[!boolMe] <- NA 
> valMe 
[1] NA 2 3 4 NA 6 

! отрицает логическое логическое значение, так что вы выберите значения, которые вы хотите пропавшими без вести. Затем, прикосновением к R awesomeness, вы назначаете NA выбранным значениям.

Смежные вопросы