我正在寻找数据中的异常值;哪个地方最差?
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
[请忽略以下......] 此外,如果评级是数字而不是分类,是否有类似的方法来获得最高/最低四分位数的地方(不确定这是否是一个单独的问题)?
如果有其他帖子回答此问题,请指出;到目前为止,我已经查看了很多关于计数和聚合的帖子。
答案 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