【问题标题】:Subseting data and summerise it based on many conditions and groups in R子集数据并根据R中的许多条件和组对其进行汇总
【发布时间】:2020-06-29 20:26:09
【问题描述】:

我需要对数据框进行子集化,并根据两个分类变量的不同组组合计算一些摘要:成员资格和性别。 例如:

set.seed(123)

df <- data.frame( YEAR = c("1999", "1999", "1999", "1999", "2001", "2000","2000", "2000", 
"1999","2000", "2000","1999", "2000", "2001", "2001", "2001", "2001"),
Sex=c("M", "M","M", "F", "M","M", "F","F", "F", "M", "F","F", "M", "M", "M", "F", "F"),
Membership = rep(c("YES", "NO"), each = 2), 
Income  = sample(1:10000, 17), 
Taxes = sample(1:100, 17))

对于每一年和四种可能的组组合(M,Yes),(M,NO),(F,Yes),(F,NO)中的每一种,我需要找出总收入之间的比率是多少各组当年的总收入和各组的总收入。这同样适用于税收列。

例如,对于 1999 和 (M, N),输出应为 (986+4233)/986+4233+9954+4776+8536) =0.1832

知道如何获得它吗? 谢谢

【问题讨论】:

  • 请使用set.seed。此外,该示例给出了一些错误

标签: r dataframe subset


【解决方案1】:

我会做这样的事情......

library(tidyverse)
df %>%
  group_by(YEAR, Sex, Membership) %>%
  summarize(GroupIncome = sum(Income), GroupTaxes = sum(Taxes)) %>%
  group_by(YEAR) %>%
  mutate(TotalIncomeForYear = sum(GroupIncome),
         GroupPercentIncome = GroupIncome / TotalIncomeForYear,
         TotalTaxesForYear = sum(GroupTaxes),
         GroupPercentTaxes = GroupTaxes / TotalTaxesForYear) %>%
  ungroup()

产生这样的数据框...

【讨论】:

  • 这正是我所需要的,它完全解决了我的问题。谢谢
【解决方案2】:

以下代码使用包dplyr

  1. 计算YEAR 总计IncomeTaxes
  2. YEARSexMembership 的组计算IncomeTaxes 的总和,
  3. 在同一指令中,将后面的总数除以前面计算的 YEAR

取消组合结果。

library(dplyr)

df %>%
  group_by(YEAR) %>%
  mutate(SumYearIncome = sum(Income),
         SumYearTaxes = sum(Taxes)) %>%
  ungroup() %>%
  group_by(YEAR, Sex, Membership) %>%
  mutate(RatioGroupIncome = sum(Income)/SumYearIncome,
         RatioGroupTaxes = sum(Taxes)/SumYearTaxes) %>%
  ungroup() %>%
  select(-SumYearIncome, -SumYearTaxes)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多