[英]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。像這樣:
這是什么原因。 不太確定如何正確執行此步驟
使用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.