在R中子集数据帧

时间:2013-02-01 04:11:25

标签: r

我是R的新手并且学习了子集化。我有一张桌子,我正试图获得表格子集的大小。我的问题是,当我尝试两种不同的方式时,我会得到两个不同的答案。对于表“dat”,我试图选择RMS为5且BDS为2的所有行:

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

给出了与

不同的答案
dim(subset(dat,(dat$RMS==5) & (dat$BDS==2)))

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

由于

2 个答案:

答案 0 :(得分:5)

原因必须是通过这两种方法对NA值进行不同的处理。如果从数据框中删除带NA的行,则应得到相同的结果:

dat_clean = na.omit(dat)

答案 1 :(得分: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