Получите процент нулевых отсчетов - PullRequest
1 голос
/ 08 июля 2020
df <- data.frame(tid = c(1,1,1,2,2,3,3), aci = c(31122,0,491,31,0,0,0))

Как можно получить набор из 0 опций на уникальный номер tid.

data.frame(tid = c(1,2,3), aci_per = c(33.3,50,100))

Ответы [ 2 ]

2 голосов
/ 08 июля 2020

Вы можете попробовать это:

library(dplyr)

df %>% mutate(Flag=ifelse(aci==0,1,0)) %>% group_by(tid) %>%
  summarise(Per=paste0(100*round(mean(Flag==1),3),'%'))

# A tibble: 3 x 2
    tid Per  
  <dbl> <chr>
1     1 33.3%
2     2 50%  
3     3 100% 
2 голосов
/ 08 июля 2020

Мы можем получить процент, взяв mean логического вектора

library(dplyr)
df %>%
     group_by(tid) %>% 
     summarise(aci_per = 100 *mean(aci == 0))
# A tibble: 3 x 2
#    tid aci_per
#  <dbl>   <dbl>
#1     1    33.3
#2     2    50  
#3     3   100  

Или в base R

aggregate(cbind(aci_per = aci) ~ tid, df, FUN = function(x) 100 *mean(x == 0))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...