2013-02-01 23 views
2

我是R新手,了解子集。我有一个表,我试图获得表的一个子集的大小。我的问题是,当我尝试两种不同的方式时,我会得到两个不同的答案。对于表“DAT”里我想选择所有行RMS是5和BDS是2:在R中设置数据帧

dim(dat[(dat$RMS==5) & (dat$BDS==2),]) 

给了我不同的答案比

dim(subset(dat,(dat$RMS==5) & (dat$BDS==2))) 

第二个是正确的,有人可以解释为什么这些不同,为什么第一个给我错误的答案?

感谢

+0

不需要在子集内使用dat $子集(子集(dat,RMS == 5和BDS == 2))'但我认为即使是,你也应该得到相同的结果。 – agstudy

+3

您可以通过提供一些数据来帮助我们提供帮助,例如'dput(head(dat,20))'' – vaettchen

回答

5

原因必须在这两种方法不同的治疗NA值。如果从数据帧中删除NA行,您应该得到相同的结果:

dat_clean = na.omit(dat) 
2

对我的作品.....

> x = c(1,1,2,2,3,3) 
> y = c(4,4,5,5,6,6) 
> 
> X = data.frame(x,y) 
> 
> dim(X[X$x==1 & X$y==4,]) 
    [1] 2 2 
> 
> (X[X$x==1 & X$y==4,]) 
    x y 
1 1 4 
2 1 4 

> dim(subset(X,(X$x==1) & (X$y==4))) 
    [1] 2 2 
> subset(X,(X$x==1) & (X$y==4)) 
    x y 
1 1 4 
2 1 4