簡體   English   中英

計算每組值的百分比?

[英]Calculate the percentage of a value per group?

我有這個數據框

df.bar <- data.frame(diagnosis = c("A","A","A", "nb" ,"nb", "hg"),
  C1 = c(1,1,0,0,1,0), C2 = c(0,1,0,0,0,0))


    df.bar
   diagnosis C1 C2
   1         A  1  0
   2         A  1  1
   3         A  0  0
   4        nb  0  0
   5        nb  1  0
   6        hg  0  0

我想計算每個診斷的“一個”百分比如下:

   diagnosis C1 C2
   1        A  66%  33%       
   2        nb  50%  0%
   3        hg  0%  0%

Dplyr 答案:

library(dplyr)

df.bar |> group_by(diagnosis) |> summarise(C1 = sum(C1) / n() * 100,
                                           C2 = sum(C2) / n() * 100)
library(tidyverse)
df.bar %>% 
  group_by(diagnosis) %>% 
  summarise(
    C1 = str_c(round(sum(C1)/n()*100,2), "%"),
    C2 = str_c(round(sum(C2)/n()*100,2), "%")
  )
# A tibble: 3 × 3
  diagnosis C1     C2    
  <chr>     <chr>  <chr> 
1 A         66.67% 33.33%
2 hg        0%     0%    
3 nb        50%    0% 
  1. 使用aggregate()base解決方案:
aggregate(cbind(C1, C2) ~ diagnosis, df.bar,
          \(x) paste0(round(mean(x) * 100, 2), '%'))
  1. dplyr解決方案:
library(dplyr)

df.bar %>%
  group_by(diagnosis) %>%
  summarise(across(C1:C2, ~ paste0(round(mean(.x) * 100, 2), '%')))

# # A tibble: 3 × 3
#   diagnosis C1     C2
#   <chr>     <chr>  <chr>
# 1 A         66.67% 33.33%
# 2 hg        0%     0%
# 3 nb        50%    0%

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM