Próbuję użyć dplyr::case_when
w obrębie dplyr::mutate
, aby utworzyć nową zmienną, w której ustawiam niektóre wartości na brakujące i przekodowuję inne wartości jednocześnie.Unikanie konfliktu typów z dplyr :: case_when
Jednak gdy próbuję ustawić wartości NA
, dostaję błąd mówiąc, że nie możemy tworzyć zmienne new
ponieważ NA
s są logiczne:
Error in mutate_impl(.data, dots) :
Evaluation error: must be type double, not logical.
Czy istnieje sposób, aby ustawić wartości NA
w nielogiczny wektor w ramce danych wykorzystującej to?
library(dplyr)
# Create data
df <- data.frame(old = 1:3)
# Create new variable
df <- df %>% dplyr::mutate(new = dplyr::case_when(old == 1 ~ 5,
old == 2 ~ NA,
TRUE ~ old))
# Desired output
c(5, NA, 3)
Można również zrobić 'as.numeric (NA)' lub 'as.integer (NA)' na 'przypadkach NA', jak i' NA_real_' 'NA_integer_' są nieco denerwujące do zapamiętania i rzadko używane poza takimi rzeczami. – Marius
Nice. Ponadto, aby pokazać: identyczne (NA_real_, as.numeric (NA)) daje TRUE. – user3614648
@hadley Ta odpowiedź jest teraz dla mnie jasna, ale zajęło mi to trochę czasu. Byłoby bardzo pomocne mieć przykład tego w tidyverse 'case_when' dokumentacji. W moim przypadku, gdy brakowało wszystkich wartości dla zgrupowanych danych, średnia (x [1: 2], na.rm = T) generowała wynik NaN. przekodowanie tych przypadków na NA_real_ naprawiło to. –