【问题标题】:How to use a counting function and case_when simultaneously in R?如何在 R 中同时使用计数函数和 case_when?
【发布时间】:2021-09-05 15:36:09
【问题描述】:

我有一个数据框,我想计算每个名称符合特定条件的观察次数:

library(dplyr)
test <- tibble(name = c("Justin", "Corey", "Sibley", "Justin", "Corey", "Sibley", "Justin", "Corey", "Sibley"),
               class = c("Bio", "Bio", "Bio", "Psych", "Pysch", "Psych", "English", "English", "English"),
               result = c("Fail", "Pass", "Pass", "Fail", "Pass", "Pass", "Fail", "Fail", "Pass"))

在上面的示例中,学生学习的课程是 STEM(例如“Bio”和“Psych”)或文学(“English”)。我想创建两列新列,一列表示他们的 STEM 分数,另一列包含他们的文学分数,其中代码每通过一次计为 1。

答案应该是这样的:

library(dplyr)
answer <- tibble(name = c("Justin", "Corey", "Sibley"),
                 stem_assessment = c(0, 2, 2),
                 lit_assessment = c(0, 0, 1))

我尝试过使用case_when()group_by()n()summarize()count(),但我似乎无法破解它。

【问题讨论】:

    标签: r dplyr group-by case-when summarize


    【解决方案1】:

    group_bysummarise 应该这样做 -

    library(dplyr)
    
    stem <- c("Bio", "Pysch", "Psych")
    lit <- c('English')
    
    test %>%
      group_by(name) %>%
      summarise(stem_assessment = sum(class %in% stem & result == "Pass"),
                lit_assessment = sum(class %in% lit & result == "Pass"))
    
    #   name   stem_assessment lit_assessment
    #  <chr>            <int>          <int>
    #1 Corey                2              0
    #2 Justin               0              0
    #3 Sibley               2              1
    

    【讨论】:

      【解决方案2】:

      您可以使用count()pivot_longer/pivot_wider 的组合。我还在test 中编码了错字(Pysch)。

      library(tidyverse)
      
      test %>%
        mutate(
          stem_assessment = class %in% c("Bio", "Psych", "Pysch") & result == "Pass",
          lit_assessment = class == "English" & result == "Pass"
        ) %>% 
        select(-c(class, result)) %>%
        pivot_longer(-name, names_to = "var", values_to = "value") %>% 
        count(name, var, wt = value) %>% 
        pivot_wider(name, names_from = var, values_from = n)
      

      【讨论】:

      • 谢谢!此外,对于阅读本文的任何人,要使用 pivot_longer() 或 pivot_wider(),您需要加载 tidyr 包。
      • 好点!谢谢。我添加了加载tidyverse的代码。
      猜你喜欢
      • 2018-03-04
      • 1970-01-01
      • 2023-01-05
      • 1970-01-01
      • 1970-01-01
      • 2020-07-08
      • 2020-10-07
      • 2018-11-08
      • 2019-07-06
      相关资源
      最近更新 更多