2013-02-01 35 views
2

我目前正在使用coursera上的视频帮助学习R。当试图排除那些医院表格数量少于20的国家医院时,由于缺乏R的编程知识,我无法找到正确的解决方案(因为我有C的程序批次,我试图在R中实施的逻辑是也喜欢C)我用了排除行状态具有聚集上的少于一些值

代码是这样

>test <- read.csv("outcome-of-care-measures.csv", colClasses = "character") 
>test[, 11] <- as.numeric(outcome[, 11]) 
>test2 <- table(outcome$State) 
从表 test2

在这里,我可以得到特定行的值作为test2[[2]],但无法找到如何使用条件逻辑获得少于20医院的状态(如果我得到州名,那么我可以使用子集()来解决实际问题)。我也看过dimnames()函数,但可以找出解决我的问题的任何想法。所以我的问题是,在R如何检查表值的阈值。在test2

超值店是

AK AL AR AZ CA CO CT DC DE FL GA GU HI IA ID IL IN KS KY LA MA MD ME 
17 98 77 77 341 72 32 8 6 180 132 1 19 109 30 179 124 118 96 114 68 45 37 
MI MN MO MS MT NC ND NE NH NJ NM NV NY OH OK OR PA PR RI SC SD TN TX 
134 133 108 83 54 112 36 90 26 65 40 28 185 170 126 59 175 51 12 63 48 116 370 
UT VA VI VT WA WI WV WY ##State Name 
42 87 2 15 88 125 54 29 ##Count of Hospital 
+2

'table'的输出是一个向量。所以,足够'test2 [2]'(使用一个'[]')来访问该元素。两个'[[]]'用于列表。现在回答你的问题:'test2 [test2> = 20]'应该给你所有值> = 20。'names(test2 [test2> = 20])'会给你状态。 – Arun

回答

3

Arun也对他的评论指定...你可以做它为names(test2[test2 >= 20])为了获得高于20医院的状态... Here是很好的解释,为什么你必须避免subset

2

或者哟可以改变你的表到data.frame和使用subset

dat <- as.data.frame(test2) 
subset(dat, Freq < 20) 
    nn Freq 
1 AK 17 
8 DC 8 
9 DE 6 
12 GU 1 
13 HI 19 
42 RI 12 
49 VI 2 
50 VT 15 
+3

只是想我会指出这个不错的帖子[**使用子集**的一些缺点](http://stackoverflow.com/questions/9860090/in-r-why-is-better-than-subset)在非交互式会话中。 – Arun

+1

@阿伦感谢您的链接... – Lionel

+1

@Pattinson dat这里只有2列。看到我的更新。 – agstudy

相关问题