【发布时间】:2023-02-06 12:41:10
【问题描述】:
我正在使用 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()
但我得到的结果是空的
有人可以告诉我我做错了什么以及如何解决这个问题吗?
谢谢!
【问题讨论】:
-
你能显示你的预期输出吗?您的函数正在检查每一行,因此在某些年份它可以是 TRUE 或 FALSE。
标签: r