簡體   English   中英

是否有 R 函數來計算百分比?

[英]Is there an R function to calculate percentages?

我有一個如下所示的 DF,稱為 crash_stats_TA。

TA_code TA_name 崩潰
061 灰色的 126
062 布勒 345
063 韋斯特蘭 24
064 提丸 112

我正在嘗試使用 mutate 創建一個名為 crashes_perc 的新列。 這是我迄今為止嘗試過的:

library(dplyr) # data manipulation

crash_stats_TA <- crash_stats_TA %>%
  group_by(TA_code, TA_name) %>%
  mutate(crashes_perc = round(Crashes/sum(Crashes, na.rm = T)*100,2))

但是,這將返回一個新的 crashes_perc 列,每個 TA_code 和 TA_name 的值為 100,因此每個區域都有 100。像這樣:

df

這是什么原因。 不太確定如何正確執行此步驟

使用scales::percent

crash %>%
  group_by(TA_code, TA_name) %>%
  mutate(crashes_perc = scales::percent(Crashes/sum(Crashes, na.rm = T)))

  TA_code TA_name  Crashes crashes_perc
    <int> <chr>      <int> <chr>       
1      61 Grey         126 20.8%       
2      62 Buller       345 56.8%       
3      63 Westland      24 4.0%        
4      64 Timaru       112 18.5% 

100% 的原因是因為每個組只有值“崩潰”並且sum返回相同的值。 相反,它應該沒有任何分組

library(dplyr)
crash_stats_TA %>% 
  mutate(crashes_perc = round(Crashes/sum(Crashes, na.rm = TRUE)*100,2))

-輸出

TA_code  TA_name Crashes crashes_perc
1      61     Grey     126        20.76
2      62   Buller     345        56.84
3      63 Westland      24         3.95
4      64   Timaru     112        18.45

base R ,使用proportions

crash_stats_TA$crashes_perc <- with(crash_stats_TA, round(100 * 
         proportions(Crashes), 2))

數據

crash_stats_TA <- structure(list(TA_code = 61:64, TA_name = c("Grey", "Buller", 
"Westland", "Timaru"), Crashes = c(126L, 345L, 24L, 112L)), 
class = "data.frame", row.names = c(NA, 
-4L))

通過引用具有美元符號語法的列進行求和可能是最簡單的解決方案:

library(magrittr)
library(dplyr)

crash_stats_TA <- data.frame(
  TA_code = c("061", "062", "063", "064"),
  TA_name = c("Grey", "Buller", "Westland", "Timaru"),
  Crashes = c(126, 345, 24, 112))

crash_stats_TA %<>%
  mutate(crashes_perc = Crashes/sum(crash_stats_TA$Crashes, na.rm = TRUE))

暫無
暫無

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

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