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))
Вы можете попробовать это:
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%
Мы можем получить процент, взяв mean логического вектора
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
base R
aggregate(cbind(aci_per = aci) ~ tid, df, FUN = function(x) 100 *mean(x == 0))