Jak używać case_when() w dplyr
Funkcji case_when() z pakietu dplyr w R można używać do tworzenia nowych zmiennych na podstawie istniejących zmiennych.
Ta funkcja wykorzystuje następującą podstawową składnię:
library (dplyr) df %>% mutate (new_var = case_when (var1 < 15 ~ ' low ', var2 < 25 ~ ' med ', TRUE ~ ' high '))
Należy pamiętać, że TRUE jest odpowiednikiem instrukcji „else”.
Poniższe przykłady pokazują, jak w praktyce wykorzystać tę funkcję z następującą ramką danych:
#create data frame df <- data. frame (player = c('AJ', 'Bob', 'Chad', 'Dan', 'Eric', 'Frank'), position = c('G', 'F', 'F', 'G', 'C', NA), points = c(12, 15, 19, 22, 32, NA), assists = c(5, 7, 7, 12, 11, NA)) #view data frame df player position points assists 1 AJ G 12 5 2 Bob F 15 7 3 Chad F 19 7 4 Dan G 22 12 5 Eric C 32 11 6 Frank NA NA NA
Przykład 1: Utwórz nową zmienną na podstawie istniejącej zmiennej
Poniższy kod pokazuje jak utworzyć nową zmienną o nazwie jakość , której wartości pochodzą z kolumny punktów :
df %>% mutate (quality = case_when (points > 20 ~ ' high ', points > 15 ~ ' med ', TRUE ~ ' low ' )) player position points assists quality 1 AJ G 12 5 low 2 Bob F 15 7 low 3 Chad F 19 7 med 4 Dan G 22 12 high 5 Eric C 32 11 high 6 Frank NA NA NA low
Oto dokładnie jak funkcja case_when() utworzyła wartości dla nowej kolumny:
- Jeśli wartość w kolumnie punktów jest większa niż 20, wówczas wartość w kolumnie jakości jest „wysoka”.
- W przeciwnym razie, jeśli wartość w kolumnie punktów jest większa niż 15, wówczas wartość w kolumnie jakości to „med”.
- W przeciwnym razie, jeśli wartość w kolumnie punktów jest mniejsza lub równa 15 (lub brakuje wartości, np. NA), wówczas wartość w kolumnie jakości jest „niska”.
Przykład 2: Utwórz nową zmienną z wielu zmiennych
Poniższy kod pokazuje jak utworzyć nową zmienną o nazwie jakość , której wartości pochodzą z punktów i kolumn pomocniczych :
df %>% mutate (quality = case_when (points > 15 & assists > 10 ~ ' great ', points > 15 & assists > 5 ~ ' good ', TRUE ~ ' average ' )) player position points assists quality 1 AJ G 12 5 average 2 Bob F 15 7 average 3 Chad F 19 7 good 4 Dan G 22 12 great 5 Eric C 32 11 great 6 Frank NA NA NA average
Zauważ, że możemy również użyć funkcji is.na() do jawnego przypisania ciągów znaków do wartości NA:
df %>% mutate (quality = case_when (is. na (points) ~ ' missing ', points > 15 & assists > 10 ~ ' great ', points > 15 & assists > 5 ~ ' good ', TRUE ~ ' average ' )) player position points assists quality 1 AJ G 12 5 average 2 Bob F 15 7 average 3 Chad F 19 7 good 4 Dan G 22 12 great 5 Eric C 32 11 great 6 Frank NA NA NA missing
Dodatkowe zasoby
Jak ułożyć linie w R
Jak liczyć obserwacje na grupę w R
Jak filtrować wiersze zawierające określony ciąg w R