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

showing values having counts of another value

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

    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)

这需要多个步骤;首先找到有任何差评的地方并将结果放入 table,告诉我 CA 是最差的,有 3 "bads":

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 

[以下请无视...] 此外,如果评分是数字评分而不是分类评分,是否有类似的方法来获取落入 highest/lowest 四分位数的位置(不确定这是否是一个单独的问题)?

如果另一个post回答了这个问题,请指出;到目前为止,我已经看了很多关于计数和聚合的 post。

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

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

至于第二个问题,我不确定你所说的 属于 highest/lowest 四分位 的地方是什么意思,但也许你可以从正在关注。

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

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

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