I have a df with the percentage of good, regular and bad students in two classrooms in the first two rows, and with the percentage of good, regular and bad students in the whole school, like this:
Classr Good Regular Bad
<chr> <dbl> <dbl> <dbl>
1 A 30 10 60
2 B 40 10 50
3 PR 80 10 10
I need to calculate an index for any classroom which is the result of
|PRGood-GoodA|+|PRRegular-RegularA|+|PRBad-BadA| and for classroom B |PRGood-GoodB|+|PRRegular-RegularB|+|PRBad-BadB|
In this example, the result should be:
Classr Good Regular Bad INDEX
<chr> <dbl> <dbl> <dbl> <dbl>
1 A 30 10 60 100
2 B 40 10 50 80
3 PR 80 10 10 NA <- This value doesn't matter
Any idea on how to do so?
I tried with this code but I get an error message:
df%>%
mutate(across(2:4, ~.-tail(1,across(2:4)),))
One option to achieve your desired result may look like so:
library(dplyr)
mutate(d, INDEX = rowSums(across(c(Good, Regular, Bad), ~ abs(.x[length(.x)] - .x))))
#> Classr Good Regular Bad INDEX
#> 1 A 30 10 60 100
#> 2 B 40 10 50 80
#> 3 PR 80 10 10 0
DATA
d <- structure(list(Classr = c("A", "B", "PR"), Good = c(
30L, 40L,
80L
), Regular = c(10L, 10L, 10L), Bad = c(60L, 50L, 10L)), class = "data.frame", row.names = c(
"1",
"2", "3"
))
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.