r语言完成:有一个班的同学的成绩被分别存在四个表中,其中两个表格是平时成绩,另外的两个表格是期末考试成绩(注意:部分同学由于统计的问题,可能同时存在两个表中,请看附件!),请按要求完成以下任务: 1,请将两份平时成绩的表格合并,将重复的人员的数据剔除一份,仅保留一份,并按照学号后三位从小到大的顺序编排好; 2,平时成绩是由字母表示,并没有给出实际分数,请首先合并平时成绩表格并完成对应的数据转换工作,其中具体的转换标准如下: A+ = 95;A = 90;A- = 85;B+ = 80;B = 75;B- = 70;C+ = 65; C = 60;C- = 55;
时间: 2023-06-12 12:05:34 浏览: 132
以下是R语言代码实现:
首先,读取四个表格数据:
```R
library(readxl)
# 读取四个表格数据
usual_grade1 <- read_excel("usual_grade1.xlsx")
usual_grade2 <- read_excel("usual_grade2.xlsx")
final_grade1 <- read_excel("final_grade1.xlsx")
final_grade2 <- read_excel("final_grade2.xlsx")
```
然后,将两份平时成绩的表格合并,去除重复数据,并按照学号后三位从小到大的顺序编排好:
```R
# 合并平时成绩表格
usual_grade <- rbind(usual_grade1, usual_grade2)
# 去除重复数据
usual_grade <- unique(usual_grade)
# 按照学号后三位从小到大的顺序编排好
usual_grade <- usual_grade[order(substring(usual_grade$学号, 6)), ]
```
接下来,完成对应的数据转换工作:
```R
# 定义成绩转换函数
convert_grade <- function(x) {
if (x == "A") {
return(95)
} else if (x == "A+") {
return(90)
} else if (x == "A-") {
return(85)
} else if (x == "B") {
return(80)
} else if (x == "B+") {
return(75)
} else if (x == "B-") {
return(70)
} else if (x == "C") {
return(65)
} else if (x == "C+") {
return(60)
} else if (x == "C-") {
return(55)
} else {
return(0)
}
}
# 对平时成绩表格进行转换
usual_grade$平时成绩 <- sapply(usual_grade$平时成绩, convert_grade)
```
最后,将四个表格合并成一个表格,根据学号匹配对应的成绩:
```R
# 将四个表格合并成一个表格
all_grade <- rbind(usual_grade, final_grade1, final_grade2)
# 根据学号匹配对应的成绩
library(dplyr)
result <- inner_join(all_grade, all_grade, by = "学号") %>%
filter(!grepl("平时成绩.y", colnames(.))) %>%
mutate(平时成绩 = ifelse(is.na(平时成绩.x), 平时成绩.y, 平时成绩.x)) %>%
select(学号, 姓名.x, 性别.x, 平时成绩, 期末成绩.x) %>%
rename(姓名 = 姓名.x, 性别 = 性别.x, 期末成绩 = 期末成绩.x)
```
最终,得到的结果就是一个包含所有同学成绩的表格,其中平时成绩已经被转换为实际分数。
阅读全文