我是R的新手,我正在尝试从csv文件处理数据框(如下面的代码所示)。它有医院数据,有46列和4706行(其中一列是'州')。我创建了一个表,显示State列中每个值的行数。因此,本质上该表显示了该州的每个州和医院的数量。现在我要做的是对数据框进行子集化并创建一个新的数据框,而不包含状态少于20个医院的条目。
如何计算State列中值的出现次数,然后删除那些计数低于20的值?也许我应该使用table()函数,删除不需要的数据并使用像lappy()之类的东西将它放入一个新的数据框中,但由于我缺乏使用R编程的经验,我不确定。
任何帮助将不胜感激。我已经看到了删除此站点中具有某些列值的行的其他示例,但没有根据特定列值的计数执行此操作的示例。
> outcome <- read.csv("outcome-of-care-measures.csv", colClasses = "character")
> hospital_nos <- table(outcome$State)
> hospital_nos
AK AL AR AZ CA CO CT DC DE FL GA GU HI IA ID IL IN KS KY LA MA MD ME MI
17 98 77 77 341 72 32 8 6 180 132 1 19 109 30 179 124 118 96 114 68 45 37 134
MN MO MS MT NC ND NE NH NJ NM NV NY OH OK OR PA PR RI SC SD TN TX UT VA
133 108 83 54 112 36 90 26 65 40 28 185 170 126 59 175 51 12 63 48 116 370 42 87
VI VT WA WI WV WY
2 15 88 125 54 29
答案 0 :(得分:7)
这是一种方法。从以下数据框开始:
df <- data.frame(x=c(1:10), y=c("a","a","a","b","b","b","c","d","d","e"))
如果您想只保留df$y
中出现次数超过2次的行,您可以执行以下操作:
tab <- table(df$y)
df[df$y %in% names(tab)[tab>2],]
给出了:
x y
1 1 a
2 2 a
3 3 a
4 4 b
5 5 b
6 6 b
这是一个包含plyr
包的单行解决方案:
ddply(df, "y", function(d) {if(nrow(d)>2) d else NULL})