显示具有另一个值的计数值

时间:2017-08-19 15:54:03

标签: r counting

我正在寻找数据中的异常值;哪个地方最差?

    place = rep(c('AL','AK','AZ','AR','CA','CO','CT','DE','FL','GA','HI'), times=4)
    measure = rep(c('meas1','meas2','meas3','meas4'), each=11)
    set.seed(200)
    rating = sample(c('good','bad'), size = 44, prob=c(2,1), replace=T)
    df = data.frame(place, measure, rating)

现在需要多个步骤;首先找到任何评级不佳的地方并将结果放入表中,告诉我CA是最糟糕的,有3"坏":

bads = df %>% 
 filter(rating == 'bad')

sort(table(bads$place), decreasing = T)
> bads
   place measure rating
1     AR   meas1    bad
2     CA   meas1    bad
3     CO   meas1    bad
4     CT   meas1    bad
5     DE   meas2    bad
6     AK   meas3    bad
7     CA   meas3    bad
8     AK   meas4    bad
9     CA   meas4    bad
10    FL   meas4    bad
11    GA   meas4    bad

> sort(table(bads$place), decreasing = T)

CA AK AR CO CT DE FL GA AL AZ HI 
 3  2  1  1  1  1  1  1  0  0  0 

[请忽略以下......] 此外,如果评级是数字而不是分类,是否有类似的方法来获得最高/最低四分位数的地方(不确定这是否是一个单独的问题)?

如果有其他帖子回答此问题,请指出;到目前为止,我已经查看了很多关于计数和聚合的帖子。

2 个答案:

答案 0 :(得分:1)

至于主要问题,也许你可以不用sort,因为它通常很耗时。

tb <- table(bads$place)
tb[which.max(tb)]

关于第二个问题,我不确定最低/最低四分位数的地方是什么意思但也许你可以通过以下方式获得灵感。

rating2 <- sample(5, 44, TRUE)
df2 <- data.frame(place, measure, rating2)

qq <- quantile(df2$rating2)
y <- findInterval(df2$rating2, qq)
names(y) <- df2$place

答案 1 :(得分:1)

data.table包对于这种事情非常方便:

> data.table(df)[rating=='bad', .N,by="place"][order(-N)]
   place N
1:    CA 3
2:    AK 2
3:    AR 1
4:    CO 1
5:    CT 1
6:    DE 1
7:    FL 1
8:    GA 1