2015-05-13 5 views
0

Я хотел бы подмножество конкретных строк с вектором идентификаторов.Подмножество конкретных строк с вектором идентификаторов - предупреждающие сообщения

Вот мои данные

data = rbind(c('B11008Z', 'Men', '13'), c('B11040Z', 'Women', '14'), c('B11040E', 'Women', '12')) 
colnames(data) <- c('id', 'sex', 'age') 
data = as.data.frame(data) 

Когда я ввожу личный идентификационный один за другим, то не проблема.

data[data$id == 'B11008Z', ] 
data[data$id == 'B11040Z', ] 

Однако, когда я создаю вектор с идентификаторами, которые я хочу, я получаю предупреждающие сообщения

idSelect = c('B11008Z', 'B11040Z') 
data[data$id == idSelect, ] 
# or 
data[which(data$id == idSelect), ] 

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

+0

'' == Сравните один-к-одному элементу формы RHS и LHS. Вместо этого вам нужно использовать '% in %'. Вы можете проиллюстрировать, как '==' дает неверный результат с помощью простого примера: «1: 2 == c (1: 2, 2); 1: 2% в% c (1: 2, 2) ' –

+0

Вы можете использовать'% in% 'вместо' == '. Например, 'data [which (data $ id% in% idSelect),]' –

ответ

0

Ваши команды зависят от равенства, и для этого требуются атомные данные, но вместо этого вы указали вектор. Вместо этого вы можете использовать операторов, о которых упоминал @davidArenburg. Вы можете сделать это, сначала сформировав список T/F, а затем извлеките список в соответствии с соответствующим значением списка.

данные $ ID% в% idSelect
[1] TRUE, TRUE, FALSE

data[data$id %in% idSelect, ]