I want to change strings into other strings (or numbers, for that matter) over multiple columns.
Tried to do this the way below:
baza <- baza |> mutate(across(c(2:23), case_match("nigdy"~ 0,
"raz lub dwa razy w życiu"~ 1,
"nie częściej niż raz w roku"~ 2,
"raz na kilka miesięcy"~ 3,
"co najmniej raz w miesiącu"~ 4,
"co najmniej raz w tygodniu"~ 5,
"wiele razy w tygodniu"~ 6,
"codziennie"~ 7)))
but get the error: ".x must be a vector, not a object."
How best to replace a set of strings with another set over multiple columns ?
Is it better to use str_replace_all here instead of case_when / case_match ?
library(tidyverse)
baza <- data.frame(A = c("nigdy","nie częściej niż raz w roku","raz na kilka miesięcy",
"co najmniej raz w miesiącu","co najmniej raz w tygodniu",
"wiele razy w tygodniu", "codziennie"),
B = c("Z","nie częściej niż raz w roku","raz na kilka miesięcy",
"co najmniej raz w miesiącu","W",
"wiele razy w tygodniu", "codziennie"),
C = c("nigdy","D","E",
"co najmniej raz w miesiącu","co najmniej raz w tygodniu",
"wiele razy w tygodniu", "codziennie"),
D = LETTERS[5:11]
)
baza
#> A B
#> 1 nigdy Z
#> 2 nie częściej niż raz w roku nie częściej niż raz w roku
#> 3 raz na kilka miesięcy raz na kilka miesięcy
#> 4 co najmniej raz w miesiącu co najmniej raz w miesiącu
#> 5 co najmniej raz w tygodniu W
#> 6 wiele razy w tygodniu wiele razy w tygodniu
#> 7 codziennie codziennie
#> C D
#> 1 nigdy E
#> 2 D F
#> 3 E G
#> 4 co najmniej raz w miesiącu H
#> 5 co najmniej raz w tygodniu I
#> 6 wiele razy w tygodniu J
#> 7 codziennie K
baza <- baza |> mutate(across(c(1:3), .fns = ~case_match(.x,
"nigdy"~ 0,
"raz lub dwa razy w życiu"~ 1,
"nie częściej niż raz w roku"~ 2,
"raz na kilka miesięcy"~ 3,
"co najmniej raz w miesiącu"~ 4,
"co najmniej raz w tygodniu"~ 5,
"wiele razy w tygodniu"~ 6,
"codziennie"~ 7, .default = NA)))
baza
#> A B C D
#> 1 0 NA 0 E
#> 2 2 2 NA F
#> 3 3 3 NA G
#> 4 4 4 4 H
#> 5 5 NA 5 I
#> 6 6 6 6 J
#> 7 7 7 7 K