【问题标题】:To find all possible grade pairs for a certain value using R使用 R 查找某个值的所有可能成绩对
【发布时间】:2020-09-08 11:10:22
【问题描述】:

我在这里有一个问题陈述,我坚持要完整地完成它。

声明如下:

假设有 5 个可能的成绩和两个相关的成绩点 培训班。假设成绩为 A、B、C、D 和 F,相关的成绩为 4、3、2、1 和 0 分别。对于一个随机选择的学生,他/她有九个可能的值 两门课程的平均绩点 (GPA),分别为 (4, 3.5, 3, 2.5, 2, 1.5, 1, 0.5, 0)。 为 例如,如果学生获得成绩 (A, D)、(B, C)、(C, B) 和 (D, A),则值 2.5。

我尽我最大的努力为 GPA 的值编写代码,作为获得的成绩的函数,并找到某个值的所有可能的成绩对。我无法获得所需的输出。任何人都可以尝试一下以获得预期的输出吗?

提前致谢!!

【问题讨论】:

    标签: r dataframe math tidyverse reshape


    【解决方案1】:

    你可以用一个 data.frame 和一个函数来解决这个问题。 首先为所有组合和 GPA 创建一个数据集,然后过滤结果。

    
    library(tidyverse)
    
    df <- data.frame(grade1 = c("A", "B", "C", "D", "F"),
                     grade2 = c("A", "B", "C", "D", "F")) %>% 
      expand.grid(.) %>%
      data.frame(.) %>%
      mutate(points1 = case_when(grade1 == "A" ~ 4,
                                 grade1 == "B" ~ 3,
                                 grade1 == "C" ~ 2,
                                 grade1 == "D" ~ 1,
                                 TRUE ~ 0),
             points2 = case_when(grade2 == "A" ~ 4,
                                 grade2 == "B" ~ 3,
                                 grade2 == "C" ~ 2,
                                 grade2 == "D" ~ 1,
                                 TRUE ~ 0),
             GPA = (points1 + points2)/2)
    
    
    df %>% 
      filter(GPA == 2.5)
    
    
      grade1 grade2 points1 points2 GPA
    1      D      A       1       4 2.5
    2      C      B       2       3 2.5
    3      B      C       3       2 2.5
    4      A      D       4       1 2.5
    

    或者你把整个代码放在一个函数中:

    find_combinations <- function(x) {
      df <- data.frame(grade1 = c("A", "B", "C", "D", "F"),
                       grade2 = c("A", "B", "C", "D", "F")) %>% 
        expand.grid(.) %>%
        data.frame(.) %>%
        mutate(points1 = case_when(grade1 == "A" ~ 4,
                                   grade1 == "B" ~ 3,
                                   grade1 == "C" ~ 2,
                                   grade1 == "D" ~ 1,
                                   TRUE ~ 0),
               points2 = case_when(grade2 == "A" ~ 4,
                                   grade2 == "B" ~ 3,
                                   grade2 == "C" ~ 2,
                                   grade2 == "D" ~ 1,
                                   TRUE ~ 0),
               GPA = (points1 + points2)/2)
      
      
      res <- df %>% 
        filter(GPA == x)
      
      return(res = res)
    }
    
    find_combinations(3)
    

    【讨论】:

      【解决方案2】:

      您可以使用dplyr 包中解决此问题的便捷函数。在此链接中查看详细信息,包括一系列基本的工作示例:

      https://tidyr.tidyverse.org/reference/expand.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-19
        • 2017-05-28
        • 1970-01-01
        • 2021-10-26
        相关资源
        最近更新 更多