J'ai ces deux tables d'exemple de jouet:
Tableau 1:
#Only include absences because it will be a smaller dataset att_ws_alt <- inner_join(attendance_events, all_students[,c("student_id","grade_level")], by = "student_id") %>% filter(attendance == 0) #Set days to check between date_from <- "2020-02-01" date_to <- "2020-02-02" #Continously pipe to not have to store and reference(?) att_drop_alt <- att_ws_alt %>% filter(dates %in% c(date_from, date_to)) %>% group_by(grade_level,dates) %>% summarize(absence_bydate = n()) %>% dcast(grade_level ~ dates) %>% sapply(FUN = function(x) { x[is.na(x)] <- 0; x}) %>% as.data.frame() %>% mutate("absence_change" = .[,3] - .[,2]) %>% select(grade_level, absence_change) %>% arrange(desc(absence_change)) >att_drop_alt grade_level absence_change 1 10 2 2 11 1 3 9 0
3 Réponses :
Je suppose que c'est un peu plus concis: bien sûr, si vous souhaitez compter des absences au lieu des présentations, mettez simplement un signe moins devant le Diff < / code> sur la dernière ligne. p> p>
Ouais c'est génial, je n'ai pas vraiment pensé à différer () être utilisé à la verticalement comme ça. Je pensais que je pouvais seulement avoir le changement après avoir obtenu les deux chiffres que je voulais côte à côte. Attendra plus de réponses avant de marquer cela comme correct
Je pense que cela doit être la version la plus courte de ce code! Malheureusement, je n'ai pas pu obtenir diff code> pour travailler dans ma réponse ... toujours pas sûr pourquoi
@dario I I Seulement de l'absence avec DIFF code> parce que j'utilisais
Résumé code> où chaque groupe n'a que deux dates, elle donne donc une valeur unique. Cette méthode ne fonctionnera pas sur plusieurs dates.
Je t'ai eu! Merci pour l'excellente explication! Il y a maintenant une réponse de données databl code> encore plus courte. Ce que j'aimerais maîtriser un jour. Mais jusque-là, le code me considère comme ASCII Art et prend pour toujours lire;)
Désolé si cela ne veut pas em> répondez à votre question, mais je ne voudrais pas accuser injustement les élèves d'être plus absents, alors ils étaient;) library(dplyr)
all_students %>%
left_join(attendance_events) %>%
mutate(dates = as.Date(dates)) %>%
group_by(grade_level, dates) %>%
summarise(NAbs = sum(ifelse(attendance == 0, 1, 0)),
N = n(),
pctAbs = NAbs / n() * 100) %>%
arrange(dates) %>%
mutate(change = pctAbs - lag(pctAbs)) %>%
ungroup() %>%
arrange(change)
# A tibble: 6 x 6
dates grade_level NAbs N pctAbs change
<date> <dbl> <dbl> <int> <dbl> <dbl>
1 2020-02-02 9 1 2 50 0
2 2020-02-02 11 1 2 50 50
3 2020-02-02 10 2 2 100 100
4 2020-02-01 9 1 2 50 NA
5 2020-02-01 10 0 2 0 NA
6 2020-02-01 11 0 2 0 NA
Oui, c'est un peu plus robuste que ma version @dario. J'essayais de le garder court, mais peut-être que cela nécessite simplement ce petit effort supplémentaire.
avec data.table code>
Ne voudriez-vous pas évaluer la présence / absence Relative i> Changements? Je veux dire si vous (extrêmement hypothétiquement à des fins de démonstration uniquement) tripler le nombre d'élèves en année et réduire de moitié l'absence relative i>, l'absence totale augmenterait toujours? Désolé si je suis mal interprété quelque chose
Ouais, je suis d'accord, mais c'est juste la question. Je suppose que le comptoir est si la décision que vous devez faire est sur une base étudiante, alors vous vous souciez de chiffres absolus plutôt que des pourcentages.