你可以用一个 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)