0

我正在基于这个数据集做一些练习。

有一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当我期望该状态被条件过滤掉时,为什么我会得到?

4

1 回答 1

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)].

于 2013-11-13T12:48:37.020 回答