R:找出哪些学生的成绩正在提高

标签 r

我正在使用 R 编程语言。

假设我有以下学生成绩数据集:

my_data = data.frame(id = c(1,1,1,1,1,2,2,2,3,3,3,3), year = c(2010,2011,2012,2013, 2014, 2008, 2009, 2010, 2018, 2019, 2020, 2021), grade = c(55, 56, 61, 61, 62, 90,89,89, 67, 87, 51, 65))

> my_data
   id year grade
1   1 2010    55
2   1 2011    56
3   1 2012    61
4   1 2013    61
5   1 2014    62
6   2 2008    90
7   2 2009    89
8   2 2010    89
9   3 2018    67
10  3 2019    87
11  3 2020    51
12  3 2021    65

我的问题:我想了解哪些学生的成绩逐年提高(或保持相同的成绩),以及哪些学生的成绩逐年变差。

利用“分组窗口函数”的思想,我尝试编写以下函数:

check_grades_improvement <- function(grades){
  for(i in 2:length(grades)){
    if(grades[i] < grades[i-1]){
      return(FALSE)
    }
  }
  return(TRUE)
}

check_grades_decline <- function(grades){
  for(i in 2:length(grades)){
    if(grades[i] > grades[i-1]){
      return(FALSE)
    }
  }
  return(TRUE)
}

然后,我尝试将这些函数应用到我的数据集:

  improving_students <- my_data %>% group_by(id) %>% 
  filter(check_grades_improvement(grade)) %>% 
  select(id) %>% 
  unique()


worse_students <- my_data %>% 
  group_by(id) %>% 
  filter(check_grades_decline(grade)) %>% 
  select(id) %>% 
  unique()

但我得到空结果

有人可以告诉我我做错了什么以及如何解决这个问题吗?

谢谢!

最佳答案

类似这样的事情:

library(dplyr)

my_data %>% 
  group_by(id) %>% 
  mutate(x = grade-lag(grade, default = grade[1])) %>% 
  mutate(peformance = case_when(x == 0 ~ "kept_same",
                                x > 0 ~ "improved",
                                x < 0 ~ "got_worse",
                                TRUE ~ NA_character_), .keep="unused")
     id  year grade peformance
   <dbl> <dbl> <dbl> <chr>     
 1     1  2010    55 kept_same 
 2     1  2011    56 improved  
 3     1  2012    61 improved  
 4     1  2013    61 kept_same 
 5     1  2014    62 improved  
 6     2  2008    90 kept_same 
 7     2  2009    89 got_worse 
 8     2  2010    89 kept_same 
 9     3  2018    67 kept_same 
10     3  2019    87 improved  
11     3  2020    51 got_worse 
12     3  2021    65 improved 

关于R:找出哪些学生的成绩正在提高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75357352/

相关文章:

python - 无法在 ubuntu 上配置 rpy2

r - 升级 R 版本后,如何轻松重新安装旧版本中安装的所有软件包?

r - 转换 "human readable"Excel 表以更正 R 中的一个(将 1 列名称扩展到多列)?

r - 计算组和总体统计数据的简洁方法

r - 如何根据 R 中的类型选择列?

识别跨列的特定事件以创建新变量

r - ggplotly() 不将日期放在 x 轴上

R - 在 ggplot2 (geom_col) 中更改形状图例

linux - 在 R 中执行 system() 后获取终端输出

r - data.table 函数可以动态操作日期和时间列吗?