【问题标题】:group by, summarise distinct cases for two variables分组,总结两个变量的不同案例
【发布时间】:2020-05-20 15:21:53
【问题描述】:

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

Case <- c("Siddhartha", "Siddhartha", "Siddhartha", "Paul", "Paul", "Paul", "Hannah")
Procedure <- c("1", "1", "2", "3", "3", "4", "1")
Location <- c("a", "a", "b", "a", "a", "b", "c")

(df <- data.frame(Case, Procedure, Location))

        Case Procedure Location
1 Siddhartha         1        a
2 Siddhartha         1        a
3 Siddhartha         2        b
4       Paul         3        a
5       Paul         3        a
6       Paul         4        b
7     Hannah         1        c

现在我执行以下操作:

df %>% 
  count(Location, Procedure) %>% 
  pivot_wider(names_from = Location, values_from = n, values_fill = list(n = 0))

这给了我:

# A tibble: 4 x 4
  Procedure     a     b     c
  <fct>     <int> <int> <int>
1 1             2     0     1
2 3             2     0     0
3 2             0     1     0
4 4             0     1     0

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

# A tibble: 4 x 4
  Procedure     a     b     c
  <fct>     <int> <int> <int>
1 1             1     0     1
2 3             1     0     0
3 2             0     1     0
4 4             0     1     0

注意程序 1 和 3 的区别。

所以我想要一个函数,它计算每个过程和每个位置的 DISTINCT 案例的数量。此外,该功能应该适用于不同的数据帧,其中存在不同(未知)的案例和过程。

问候

【问题讨论】:

  • 统计时数据是否应该按Case分组?例如。如果我用 (Hannah, 1, a) 添加第 8 行,预期的输出会改变吗?

标签: r


【解决方案1】:

函数distinct() 应该可以工作,它会根据您提供给它的列组合删除任何重复项。参数.keep_all = T 使它不会删除函数中未指定的行中的数据。如果大小写无关紧要,您可以将其删除或将其设置为 F

df %>% 
  distinct(Procedure, Location, .keep_all = T) %>% 
  count(Location, Procedure) %>% 
  pivot_wider(names_from = Location, values_from = n, values_fill = list(n = 0))

【讨论】:

    猜你喜欢
    • 2020-05-02
    • 1970-01-01
    • 2019-05-03
    • 2020-08-24
    • 1970-01-01
    • 2017-01-11
    • 1970-01-01
    • 2021-03-30
    • 2021-03-26
    相关资源
    最近更新 更多