我正在根据此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
,当我希望状态被条件过滤掉时?
答案 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)]
。