R给定分组长度准则中的子集数据帧

时间:2013-11-13 12:29:17

标签: r

我正在根据此dataset进行一些练习。

有一个State列,其中列出了该州每家医院每月因心脏病发作而死亡的人数(第11栏):

> table(data$State)

 AK  AL  AR  AZ  CA  CO  CT  DC  DE  FL  GA  GU  HI  IA  ID  IL  IN  KS  KY   
 17  98  77  77 341  72  32   8   6 180 132   1  19 109  30 179 124 118  96 

现在我尝试过滤掉至少有20个值的状态:

> table(data$State)>20

   AK    AL    AR    AZ    CA    CO    CT    DC    DE    FL    GA    GU     
FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE  TRUE  TRUE FALSE 

所以使用subset我尝试根据上述条件获取数据子集,但这给了我一个我无法遵循的结果:

> data_subset <- subset(data, table(data$State)>20)
> table(data_subset$State)

 AK  AL  AR  AZ  CA  CO  CT  DC  DE  FL  GA  GU  HI  IA  ID  IL  IN  KS  KY   
 14  84  66  65 288  64  25   8   5 155 109   1  19  93  24 153 107 100  83  

为什么我得到AK 14,当我希望状态被条件过滤掉时?

1 个答案:

答案 0 :(得分:2)

您可以使用以下方法过滤掉少于20行的数据:

tab <- table(data$State)
data[data$State %in% names(tab)[tab > 19], ]

您的代码

subset(data, table(data$State)>20)

不起作用,因为table(data$State)>20返回长度为length(table$State)的布尔矢量。在您的数据中,布尔向量比数据框中的行数短。由于载体再循环,载体与其自身结合直至达到较长的长度。例如,看看(1:3)[c(TRUE, FALSE)]