通过基于R中的向量的值选择行来新的子集

Tat*_*ata 4 r

我有一个数据集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
Run Code Online (Sandbox Code Playgroud)

现在我想拉出那些在U1.S中被归类为S的U1行.最有效的方法是什么?

42-*_*42- 11

詹姆斯的答案具有优雅的经济性,并且肯定会在这个例子中正确运行,但如果测试的矢量有任何NA,则很容易产生不良结果.(我被困多次并感到困惑.)以下两种更安全的方法可以避免"["函数的NA包含行为:

U1[which(pred.U1.nb.c=="S"), ]
Run Code Online (Sandbox Code Playgroud)

这会将逻辑矢量(可能带有NA)转换为没有NA的数值向量.也可以使用子集:

subset(U1 ,pred.U1.nb.c=="S")
Run Code Online (Sandbox Code Playgroud)

编辑:我怀疑使用grepl也会避免NA问题.也许:

U1[grepl("^S$", pred.U1.nb.c), ]
Run Code Online (Sandbox Code Playgroud)