r - 使用 R 中同一列的另一行值对特定行值执行计算
问题描述
我有一张如下表( dput 在最后)
# A tibble: 912 x 7
group_id class_id year variable value demo_names total_population
<dbl> <dbl> <dbl> <chr> <chr> <chr> <dbl>
1 449 1 2017 numerator 64 numerator 1819
2 449 1 2018 numerator 39 numerator 1531
3 449 1 2019 numerator 41 numerator 1710
4 449 1 2020 numerator 51 numerator 2075
5 450 1 2017 numerator 66 numerator 1819
6 450 1 2018 numerator 54 numerator 1531
7 450 1 2019 numerator 58 numerator 1710
8 450 1 2020 numerator 66 numerator 2075
9 451 1 2017 numerator 37 numerator 1819
10 451 1 2018 numerator 39 numerator 1531
对于各个年份和变量名称,我想计算 2 个百分比列,如下所示。在哪里,我使用特定的行值来获取百分比。
该列demo_names
有分子、分母、sex_male、sex_female、age_18-34、age_35-54、age_55。这是从列variable
中派生的,该列告诉我们列值是否具有相应年龄、性别的分子或分母。因此,计算百分比将使用分子和分母的相应值。
per_col_1 = round(sex_numerator_male/sex_denominator_male) *100,2)
round(sex_numerator_female/sex_denominator_female) *100,2)
round(numerator/denominator_2) *100,2)
round(age_numerator_18.34/age_denominator_18.34)*100,2)
round(age_numerator_35.54/age_denominator_35.54)*100,2)
round(age_numerator_55/age_denominator_55)*100,2)
per_col_2 = round(sex_numerator_male/numerator) *100,2)
round(sex_numerator_female/numerator) *100,2)
round(age_numerator_18.34/numerator)*100,2)
round(age_numerator_35.54/numerator)*100,2)
round(age_numerator_55/numerator)*100,2)
- - 数据
dput(ds)
structure(list(group_id = c(449, 449, 449, 449, 461, 461, 461,
461, 449, 449, 449, 449, 461, 461, 461, 461, 449, 449, 449, 449,
461, 461, 461, 461, 449, 449, 449, 449, 461, 461, 461, 461, 449,
449, 449, 449, 461, 461, 461, 461, 449, 449, 449, 449, 461, 461,
461, 461, 449, 449, 449, 449, 461, 461, 461, 461, 449, 449, 449,
449, 461, 461, 461, 461, 449, 449, 449, 449, 461, 461, 461, 461,
449, 449, 449, 449, 461, 461, 461, 461, 449, 449, 449, 449, 461,
461, 461, 461, 449, 449, 449, 449, 461, 461, 461, 461), class_id = c(1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), year = c(2017, 2018, 2019,
2020, 2017, 2018, 2019, 2020, 2017, 2018, 2019, 2020, 2017, 2018,
2019, 2020, 2017, 2018, 2019, 2020, 2017, 2018, 2019, 2020, 2017,
2018, 2019, 2020, 2017, 2018, 2019, 2020, 2017, 2018, 2019, 2020,
2017, 2018, 2019, 2020, 2017, 2018, 2019, 2020, 2017, 2018, 2019,
2020, 2017, 2018, 2019, 2020, 2017, 2018, 2019, 2020, 2017, 2018,
2019, 2020, 2017, 2018, 2019, 2020, 2017, 2018, 2019, 2020, 2017,
2018, 2019, 2020, 2017, 2018, 2019, 2020, 2017, 2018, 2019, 2020,
2017, 2018, 2019, 2020, 2017, 2018, 2019, 2020, 2017, 2018, 2019,
2020, 2017, 2018, 2019, 2020), variable = c("numerator", "numerator",
"numerator", "numerator", "numerator", "numerator", "numerator",
"numerator", "denominator_2", "denominator_2", "denominator_2",
"denominator_2", "denominator_2", "denominator_2", "denominator_2",
"denominator_2", "sex_numerator_male", "sex_numerator_male",
"sex_numerator_male", "sex_numerator_male", "sex_numerator_male",
"sex_numerator_male", "sex_numerator_male", "sex_numerator_male",
"sex_numerator_female", "sex_numerator_female", "sex_numerator_female",
"sex_numerator_female", "sex_numerator_female", "sex_numerator_female",
"sex_numerator_female", "sex_numerator_female", "sex_denominator_male",
"sex_denominator_male", "sex_denominator_male", "sex_denominator_male",
"sex_denominator_male", "sex_denominator_male", "sex_denominator_male",
"sex_denominator_male", "sex_denominator_female", "sex_denominator_female",
"sex_denominator_female", "sex_denominator_female", "sex_denominator_female",
"sex_denominator_female", "sex_denominator_female", "sex_denominator_female",
"age_numerator_18.34", "age_numerator_18.34", "age_numerator_18.34",
"age_numerator_18.34", "age_numerator_18.34", "age_numerator_18.34",
"age_numerator_18.34", "age_numerator_18.34", "age_numerator_35.54",
"age_numerator_35.54", "age_numerator_35.54", "age_numerator_35.54",
"age_numerator_35.54", "age_numerator_35.54", "age_numerator_35.54",
"age_numerator_35.54", "age_numerator_55", "age_numerator_55",
"age_numerator_55", "age_numerator_55", "age_numerator_55", "age_numerator_55",
"age_numerator_55", "age_numerator_55", "age_denominator_18.34",
"age_denominator_18.34", "age_denominator_18.34", "age_denominator_18.34",
"age_denominator_18.34", "age_denominator_18.34", "age_denominator_18.34",
"age_denominator_18.34", "age_denominator_35.54", "age_denominator_35.54",
"age_denominator_35.54", "age_denominator_35.54", "age_denominator_35.54",
"age_denominator_35.54", "age_denominator_35.54", "age_denominator_35.54",
"age_denominator_55", "age_denominator_55", "age_denominator_55",
"age_denominator_55", "age_denominator_55", "age_denominator_55",
"age_denominator_55", "age_denominator_55"), value = c("64",
"39", "41", "51", "149", "158", "203", "236", "79226", "79033",
"78891", "78891", "331407", "330987", "330073", "330073", "54",
"39", "40", "46", "109", "114", "147", "169", "42", "#VALUE!",
"33", "37", "72", "76", "88", "99", "39811", "39631", "39558",
"39558", "157777", "157834", "157018", "157018", "39447", "39434",
"39365", "39365", "173662", "173185", "173087", "173087", "48",
"34", "37", "41", "70", "86", "85", "108", "42", "36", "34",
"41", "87", "87", "116", "129", "38", "33", "34", "33", "56",
"49", "66", "63", "22723", "22663", "22754", "22754", "99735",
"99362", "98694", "98694", "24668", "24266", "23797", "23797",
"103850", "102584", "101293", "101293", "31899", "32168", "32404",
"32404", "127886", "129105", "130150", "130150"), demo_names = c("numerator",
"numerator", "numerator", "numerator", "numerator", "numerator",
"numerator", "numerator", "denominator_2", "denominator_2", "denominator_2",
"denominator_2", "denominator_2", "denominator_2", "denominator_2",
"denominator_2", "sex_male", "sex_male", "sex_male", "sex_male",
"sex_male", "sex_male", "sex_male", "sex_male", "sex_female",
"sex_female", "sex_female", "sex_female", "sex_female", "sex_female",
"sex_female", "sex_female", "sex_male", "sex_male", "sex_male",
"sex_male", "sex_male", "sex_male", "sex_male", "sex_male", "sex_female",
"sex_female", "sex_female", "sex_female", "sex_female", "sex_female",
"sex_female", "sex_female", "age_18-34", "age_18-34", "age_18-34",
"age_18-34", "age_18-34", "age_18-34", "age_18-34", "age_18-34",
"age_35-54", "age_35-54", "age_35-54", "age_35-54", "age_35-54",
"age_35-54", "age_35-54", "age_35-54", "age_55", "age_55", "age_55",
"age_55", "age_55", "age_55", "age_55", "age_55", "age_18-34",
"age_18-34", "age_18-34", "age_18-34", "age_18-34", "age_18-34",
"age_18-34", "age_18-34", "age_35-54", "age_35-54", "age_35-54",
"age_35-54", "age_35-54", "age_35-54", "age_35-54", "age_35-54",
"age_55", "age_55", "age_55", "age_55", "age_55", "age_55", "age_55",
"age_55"), total_population = c(1819, 1531, 1710, 2075, 1819,
1531, 1710, 2075, 3965491, 3974411, 3981322, 3981322, 3965491,
3974411, 3981322, 3981322, 1226, 1034, NA, 1441, 1226, 1034,
NA, 1441, NA, NA, NA, NA, NA, NA, NA, NA, 1900686, 1904909, 1908231,
1908231, 1900686, 1904909, 1908231, 1908231, 2064805, 2069502,
2073091, 2073091, 2064805, 2069502, 2073091, 2073091, NA, NA,
NA, 687, NA, NA, NA, 687, NA, 724, NA, 996, NA, 724, NA, 996,
NA, NA, NA, NA, NA, NA, NA, NA, 1234974, 1235975, 1237334, 1237334,
1234974, 1235975, 1237334, 1237334, 1251344, 1240729, 1228864,
1228864, 1251344, 1240729, 1228864, 1228864, 1479173, 1497707,
1515124, 1515124, 1479173, 1497707, 1515124, 1515124)), spec = structure(list(
cols = list(group_id = structure(list(), class = c("collector_double",
"collector")), class_id = structure(list(), class = c("collector_double",
"collector")), year = structure(list(), class = c("collector_double",
"collector")), variable = structure(list(), class = c("collector_character",
"collector")), value = structure(list(), class = c("collector_character",
"collector")), demo_names = structure(list(), class = c("collector_character",
"collector")), total_population = structure(list(), class = c("collector_double",
"collector"))), default = structure(list(), class = c("collector_guess",
"collector")), delim = ","), class = "col_spec"), problems = <pointer: 0x000001e3e6505390>, row.names = c(NA,
-96L), class = c("spec_tbl_df", "tbl_df", "tbl", "data.frame"
))
解决方案
推荐阅读
- c++ - 检测指针目标:静态内存还是动态内存?
- c - 如何使用 strtol 从用户输入中提取数字
- python - 在 Python 中解析日期时混淆日期和月份
- python-3.x - 我不知道如何编写一个猜词程序的一部分
- sabre - SABRE RedWeb 安装/入门
- spring - @Transactional 注解不回滚
- mysql - 创建具有主键和不同列值的视图会产生奇怪的结果
- typescript - vue-class-component + typescript:如何在导入的函数中使用组件的类作为“this”的类型?
- python - Discord py - 我怎样才能停止我的调度程序两次执行任务?
- excel - Excel VBA 代码适用于 Windows 10,但不适用于运行 macOS Catalina 10.15.7 和 Excel for Mac 版本 16.43 的 MacBook Pro