【问题标题】:how to sum conditional functions to grouped rows in R如何将条件函数求和到R中的分组行
【发布时间】:2021-05-18 04:49:12
【问题描述】:

我有以下数据框

customerid payment_month payment_date bill_month charges
1 January 22 January 30
1 February 15 February 21
1 March 2 March 33
1 May 4 April 43
1 May 4 May 23
1 June 13 June 32
2 January 12 January 45
2 February 15 February 56
2 March 2 March 67
2 April 4 April 65
2 May 4 May 54
2 June 13 June 68
3 January 25 January 45
3 February 26 February 56
3 March 30 March 67
3 April 1 April 65
3 June 1 May 54
3 June 1 June 68

(id数据要大得多)我想用下面的函数计算支付效率,

效率=(未逾期支付金额/总账单金额)*100

不迟于不迟于账单当月的 21 日付款。 (在 1 月 22 日支付 1 月的账单被视为迟到)

我想用期望的输出来计算每个客户的效率

customerid effectivity
1 59.90
2 100
3 37.46

我已经尝试使用以下代码来计算一个 id 并且它有效。但我想将其应用并分配给整个组 ID,并将其汇总为 1 列(有效性)和每个 ID 1 行。我曾尝试使用 group by、aggregation 和 ifelse 函数,但没有任何效果。我该怎么办?

df1 <- filter(df, (payment_month!=bill_month & id==1) | (payment_month==bill_month & payment_date > 21 & id==1) )
df2 <-filter(df, id==1001)
x <- sum(df1$charges)
x <- sum(df2$charges)
100-(x/y)*100

【问题讨论】:

    标签: r


    【解决方案1】:

    使用dplyr的选项

    
    library(dplyr)
    df %>%
        group_by(customerid) %>%
        summarise(
            effectivity = sum(
                charges[payment_date <= 21 & payment_month == bill_month]) / sum(charges) * 100,
            .groups = "drop")
    ## A tibble: 3 x 2
    #customerid effectivity
    #       <int>       <dbl>
    #1          1        59.9
    #2          2       100  
    #3          3        37.5
    

    【讨论】:

    • 谢谢!有效。我将条件更改为 payment_data >= 21 & payment_mont!=bill_month 并用 100 减去有效性以获得所需的数字并使其更精确。
    【解决方案2】:
    
    df %>% 
      group_by(customerid) %>% 
      mutate(totalperid = sum(charges)) %>% 
      mutate(pay_month_number = match(payment_month , month.name),
             bill_month_number = match(bill_month , month.name)) %>% 
      mutate(nolate = ifelse(pay_month_number > bill_month_number, TRUE, FALSE)) %>% 
      summarise(efficiency = case_when(nolate = TRUE ~ (charges/totalperid)*100))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-25
      • 1970-01-01
      • 2021-09-16
      • 2023-03-20
      • 1970-01-01
      • 2019-04-22
      相关资源
      最近更新 更多