R语言如何对比不同列数值 判断学生Grade2成绩较Grade1是否提升
R语言实现不同列的数值增减校验方法
你提供的测试数据中Grade1、Grade2默认是字符类型,需要先转换为数值类型再做比较,以下是不同实现方案:
测试数据构造
df = data.frame(Grade1 = c("5","1","7","6"), Grade2 = c("4", "5", "10", "10")) rownames(df) = c("StudentA","StudentB","StudentC","StudentD")
方法1:基础R实现
# 转换为数值类型 df$Grade1 <- as.numeric(df$Grade1) df$Grade2 <- as.numeric(df$Grade2) # 新增列标记Grade2是否高于Grade1 df$is_Grade2_higher <- df$Grade2 > df$Grade1 # 可选:新增列计算具体分差 df$grade_diff <- df$Grade2 - df$Grade1
运行后输出的df结果如下:
| Grade1 | Grade2 | is_Grade2_higher | grade_diff | |
|---|---|---|---|---|
| StudentA | 5 | 4 | FALSE | -1 |
| StudentB | 1 | 5 | TRUE | 4 |
| StudentC | 7 | 10 | TRUE | 3 |
| StudentD | 6 | 10 | TRUE | 4 |
如果需要直接筛选出成绩提升的学生,可加一行代码:
higher_student <- df[df$is_Grade2_higher, ]
方法2:dplyr包实现(适合tidyverse生态用户)
library(dplyr) df <- df %>% mutate( # 转换数值类型 Grade1 = as.numeric(Grade1), Grade2 = as.numeric(Grade2), # 校验增减 is_Grade2_higher = Grade2 > Grade1, grade_diff = Grade2 - Grade1 ) # 筛选成绩提升的学生 higher_student <- df %>% filter(is_Grade2_higher)
注意事项
- 做数值比较前务必确认列的类型为数值型,字符型比较会按照ASCII码排序得到错误结果
- 如果数据中存在非数值的异常字符,转换时会生成NA,可添加
na.rm = TRUE参数在计算时忽略空值
内容的提问来源于stack exchange,提问作者Dreammmm
相关产品推荐
相关产品推荐

