对所选列值的行进行计数,并根据 R 中的计数删除行

  • 本文关键字:删除行 r
  • 更新时间 :
  • 英文 :


我是R的新手,正在尝试处理csv文件中的数据框(从下面的代码中可以看出)。它有 46 列和 4706 行的医院数据(其中一列是"状态")。我制作了一个表格,显示"状态"列中每个值的行数。因此,从本质上讲,该表显示了每个州以及该州的医院数量。现在我想做的是数据框的子集,并创建一个没有该州少于 20 家医院的条目的新数据框。

如何计算"状态"列中值的出现次数,然后删除计数小于 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 

这里有一种方法可以做到这一点。从以下数据框开始:

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})

最新更新