如何在R中执行子集时处理缺少的行行

时间:2013-07-03 09:24:48

标签: r dataframe subset

我的数据看起来像this

   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

2 个答案:

答案 0 :(得分:3)

您应该使用&而非&&进行矢量化操作。

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

答案 1 :(得分:1)

你可以通过

子集来解决这个问题
subset(dat.full, (Cov == 10 & dis==0 & err==0 & kval==1), select=prob)

您遇到的问题是,&&未向量化,但应仅用于标量值。使用&(或|代替OR)。