Новое подмножество путем выбора строк на основе значений вектора в R - PullRequest
4 голосов
/ 24 ноября 2010

У меня есть набор данных U1, по которому я запускаю классификатор и получаю вектор меток

pred.U1.nb.c <- predict(NB.C, U1[,2:6])
table(pred.U1.nb.c)
pred.U1.nb.c
    S unlabeled 
  148      5852 
> head(pred.U1.nb.c)
  [1] S S S S S S
  Levels: S unlabeled

Теперь я хочу вытащить те строки U1, которые были классифицированы как S в U1.S. Какой самый эффективный способ сделать это?

Ответы [ 2 ]

11 голосов
/ 24 ноября 2010

Ответ Джеймса предполагает элегантную экономию и, безусловно, будет корректно работать с этим примером, но он склонен к нежелательным результатам, если в тестируемом векторе есть какие-либо NA.(Я был укушен много раз и был озадачен.) Вот два более безопасных способа, которые избегают NA-включающего поведения функции "[":

U1[which(pred.U1.nb.c=="S"), ]

Это преобразовывает логический вектор (возможно, с NA)в числовой вектор без NA.Можно также использовать подмножество:

subset(U1 ,pred.U1.nb.c=="S")

РЕДАКТИРОВАТЬ: Я подозреваю, что использование grepl также позволит избежать проблемы NA.Возможно:

U1[grepl("^S$", pred.U1.nb.c), ]
3 голосов
/ 24 ноября 2010
U1[pred.U1.nb.c=="S",]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...