将绝对值转换为 R 中的年度百分比
Transform absolute values into yearly percentages in R
我有这样一个数据库:
Year Type Return
1900 A 4
1900 B 7
1901 A 87
1901 B 3
1902 A 9.7
1902 B 2
我想将 return 绝对值转换为年度百分比。
例如。对于 1900,我想要:
4/(4+7) = 0,36
7/(4+7) = 0,64
并且:
Year Type Return
1900 A 36%
1900 B 64%
真实数据库有>10k行的行。
如果Type总是seq A,B
:
数据:
df <- data.frame(data.table::fread("Year Type Return
1900 A 4
1900 B 7
1901 A 87
1901 B 3
1902 A 9.7
1902 B 2"))
代码:
library(tidyverse)
df %>%
group_by(Year) %>%
summarise(Return = Return / sum(Return)) %>%
ungroup() %>%
mutate(Type = df$Type) %>%
relocate(Year, Type, Return) %>%
mutate(Return = round(Return, 2))
输出
Year Type Return
<int> <chr> <dbl>
1 1900 A 0.36
2 1900 B 0.64
3 1901 A 0.97
4 1901 B 0.03
5 1902 A 0.83
6 1902 B 0.17
更漂亮的输出:
df %>%
group_by(Year) %>%
summarise(Return = Return / sum(Return)) %>%
ungroup() %>%
mutate(Type = df$Type) %>%
relocate(Year, Type, Return) %>%
mutate(Return = scales::percent(Return))
Year Type Return
<int> <chr> <chr>
1 1900 A 36%
2 1900 B 64%
3 1901 A 97%
4 1901 B 3%
5 1902 A 83%
6 1902 B 17%
我有这样一个数据库:
Year Type Return
1900 A 4
1900 B 7
1901 A 87
1901 B 3
1902 A 9.7
1902 B 2
我想将 return 绝对值转换为年度百分比。
例如。对于 1900,我想要:
4/(4+7) = 0,36
7/(4+7) = 0,64
并且:
Year Type Return
1900 A 36%
1900 B 64%
真实数据库有>10k行的行。
如果Type总是seq A,B
:
数据:
df <- data.frame(data.table::fread("Year Type Return
1900 A 4
1900 B 7
1901 A 87
1901 B 3
1902 A 9.7
1902 B 2"))
代码:
library(tidyverse)
df %>%
group_by(Year) %>%
summarise(Return = Return / sum(Return)) %>%
ungroup() %>%
mutate(Type = df$Type) %>%
relocate(Year, Type, Return) %>%
mutate(Return = round(Return, 2))
输出
Year Type Return
<int> <chr> <dbl>
1 1900 A 0.36
2 1900 B 0.64
3 1901 A 0.97
4 1901 B 0.03
5 1902 A 0.83
6 1902 B 0.17
更漂亮的输出:
df %>%
group_by(Year) %>%
summarise(Return = Return / sum(Return)) %>%
ungroup() %>%
mutate(Type = df$Type) %>%
relocate(Year, Type, Return) %>%
mutate(Return = scales::percent(Return))
Year Type Return
<int> <chr> <chr>
1 1900 A 36%
2 1900 B 64%
3 1901 A 97%
4 1901 B 3%
5 1902 A 83%
6 1902 B 17%