在R中执行子集时如何处理丢失的行



我有一个数据看起来像这个

   Cov dis err kval  n         prob
1   10   0   0    0  0 7.574657e-01
2   10   0   0    0  1 2.104075e-01
3   10   0   0    0  2 2.922241e-02
4   10   0   0    1  3 2.705617e-03
5   10   0   0    1  4 1.878731e-04
6   10   0   0    0  5 1.043613e-05
7   10   0   0    0  6 4.830806e-07
8   10   0   0    0  7 1.916636e-08
9   10   1   0    0  8 6.653565e-10
10  10   1   0    0  9 2.053068e-11
11  10   1   0    0 10 5.701398e-13

我想做的是对数据执行一个子集。但为什么失败了?

dat.full <- read.table("http://dpaste.com/1283733/plain/",header=TRUE);
subset(dat.full,(Cov == 10    && dis==0 &&  err==0 && kval==1), select=prob);

它给出了以下缺失的行输出:

[1] prob
<0 rows> (or 0-length row.names)

执行子集的正确方式是什么?

我希望它能回来:

4 2.705617e-03
5 1.878731e-04

矢量化操作应该使用&,而不是&&

 subset(dat.full ,Cov == 10    & dis==0 &  err==0 & kval==1,select=prob)
          prob
4 0.0027056170
5 0.0001878731

您可以通过进行子集设置来解决此问题

subset(dat.full, (Cov == 10 & dis==0 & err==0 & kval==1), select=prob)

您遇到的问题是,&&不是矢量化的,而应该仅用于标量值。请改用&(或|表示or)。

最新更新