Guest User

Untitled

a guest
Jan 16th, 2019
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.08 KB | None | 0 0
  1. library(dplyr)
  2.  
  3. df <- data.frame(grp_A = c(13, NA, NA, NA, NA, 20, NA),
  4. grp_B = c(NA, 59, 66, NA, NA, NA, NA),
  5. grp_C = c(NA, NA, NA, 23, 42, NA, NA))
  6.  
  7. df$value <- apply(select(df, grp_A, grp_B, grp_C), 1,
  8. function(x) x[!is.na(x)])
  9.  
  10. df$value <- df[cbind(1:nrow(df), max.col(!is.na(df)))]
  11.  
  12. df
  13. # grp_A grp_B grp_C value
  14. #1 13 NA NA 13
  15. #2 NA 59 NA 59
  16. #3 NA 66 NA 66
  17. #4 NA NA 23 23
  18. #5 NA NA 42 42
  19. #6 20 NA NA 20
  20. #7 NA NA NA NA
  21.  
  22. max.col(!is.na(df))
  23. #[1] 1 2 2 3 3 1 2
  24.  
  25. library(dplyr)
  26.  
  27. df <- data.frame(grp_A = c(13, NA, NA, NA, NA, 20, NA),
  28. grp_B = c(NA, 59, 66, NA, NA, NA, NA),
  29. grp_C = c(NA, NA, NA, 23, 42, NA, NA))
  30.  
  31. mutate(df, value = Reduce(coalesce, df))
  32.  
  33. grp_A grp_B grp_C value
  34. 1 13 NA NA 13
  35. 2 NA 59 NA 59
  36. 3 NA 66 NA 66
  37. 4 NA NA 23 23
  38. 5 NA NA 42 42
  39. 6 20 NA NA 20
  40. 7 NA NA NA NA
  41.  
  42. df$value <- rowSums(df, na.rm = T)
  43.  
  44. df[df$value == 0, ] <- NA
Add Comment
Please, Sign In to add comment