如何解决跟踪多个数据帧中列值的变化
我正在尝试跨两个时间范围(和两个单独的数据帧)跟踪学生课程注册的变化。我有两个数据框,一个数据框列出了学生在上课第一天就读的课程,另一个数据框列出了上学期的入学率。
我正在尝试通过科目和课程编号来跟踪留在第一天上课的学生所占的百分比(以及因此而改变课程的百分比)。
两个数据框都看起来像这样:
YRTR TECH_ID COU_ID SUBJ COU_NBR sub_cou drop_date first_day
1 20173 12712 401 EXSC 1129 EXSC 1129 42608 42602
2 20173 12712 497 ENGC 1101 ENGC 1101 42608 42602
3 20173 128753 582 SOC 1104 SOC 1104 42608 42602
4 20173 110079 402 EXSC 1105 EXSC 1105 42608 42602
5 20173 110079 403 EXSC 1128 EXSC 1128 42608 42602
6 20173 129084 190 COMM 1111 COMM 1111 42608 42602
7 20173 364092 951 PHYS 1114 PHYS 1114 42608 42602
基本上,我想跟踪每个学生(通过tech_id)在df1中注册的课程列表,以及与该学生在df2中注册的课程的比较。到目前为止,我一直在使用dplyr来安排事情,但是可以接受所有选择!
解决方法
没有进一步说明,对此问题有很多答案。假设我们正在寻找在开始和中期之间放弃或更改课程的学生百分比,那么以下方法可以解决问题。由于无法复制数据,因此输入了类似的内容。
首先,将数据帧合并,并识别与更改关联的TECH_ID。
library(dplyr)
library(magrittr)
df1 <- tibble(TECH_ID = c(12712,12712,128753,110079,129084,364092),STR_COU_ID = c(401,405,411,401,512,500))
df2 <- tibble(TECH_ID = c(12712,MID_COU_ID = c(401,407,402,501))
change <- df1 %>%
full_join(df2) %>%
group_by(TECH_ID) %>%
mutate(change = if_else(STR_COU_ID %in% MID_COU_ID,FALSE,TRUE),change = if_else(TRUE %in% change,TRUE,FALSE)) %>%
ungroup() %>%
distinct(TECH_ID,change)
第二,我们按以下方法计算更改或放弃一门或多门课程(使用magrittr)的学生百分比。
sum(change$change) %>%
divide_by(nrow(change)) %>%
multiply_by(100)
# 60
,
对于注册变更,我将加入数据框,然后计算变更,例如
df1 %>% left_join(df2,by= "TECH_ID") %>% mutate(change = enrollment_mid/enrollment_start)
当然,您只能在连接后从df2中选择所需的列,以避免在结果数据框中出现相同的列:
df1 %>% left_join(df2 %>% select(TECH_ID,enrollment_mid),by= "TECH_ID") %>% mutate(change = enrollment_mid/enrollment_start)
或:
merge(x = df1,y = df2[,c("TECH_ID","enrollment_mid")],by = "mpg")
然后您可以按照上面的方法%>% mutate(change = enrollment_mid/enrollment_start)
进行计算
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。