简体   繁体   中英

Operations with a static row in R

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM