分组,并根据删除的重复项进行汇总

问题描述 投票:0回答:1

我们可以使用以下数据框作为示例:

Cases <- c("Siddhartha", "Siddhartha", "Siddhartha", "Paul", "Paul", "Paul", "Hannah")
Procedures <- c("1", "1", "2", "3", "3", "4", "1")

(df <- data.frame(Cases, Procedures))

       Cases Procedures
1 Siddhartha          1
2 Siddhartha          1
3 Siddhartha          2
4       Paul          3
5       Paul          3
6       Paul          4
7     Hannah          1

现在我执行以下操作:

Sum_Group <- function(df, variable){
  variable <- enquo(variable)

  df %>%
    dplyr::group_by(!! variable) %>%
    dplyr::summarize(Number = n()) %>%
    dplyr::mutate(Prozent = round((Number/sum(Number)*100)))
}

Sum_Group(df, Procedures)

这给了我:

# A tibble: 4 x 3
  Procedures Number Prozent
  <fct>       <int>   <dbl>
1 1               3      43
2 2               1      14
3 3               2      29
4 4               1      14

这不完全是我想要的。我想要的是以下数据框:

  Procedures Number Prozent
  <fct>       <int>   <dbl>
1 1               2      40
2 2               1      20
3 3               1      20
4 4               1      20

注意步骤1和3的不同。

因此,我想要的是一个函数,该函数将同一过程的多次出现汇总为一个情况,而不是像在第一个示例中那样多次出现。同样,该功能还应该在不同的数据帧上工作,在这些数据帧上存在不同(未知)的情况和过程。

我不确定,是否容易做到,我只是忽略了某些内容。

问候

r
1个回答
0
投票

您要计算每个Procedures的不同案例数。

library(dplyr)
library(rlang)

Sum_Group <- function(df, variable) {

  df %>%
    group_by({{variable}}) %>%
    summarise(Number = n_distinct(Cases)) %>%
    mutate(Prozent = round((Number/sum(Number)*100)))
}
© www.soinside.com 2019 - 2024. All rights reserved.