Ich versuche dplyr::case_when
innerhalb dplyr::mutate
zu verwenden, um eine neue Variable zu erstellen, wo ich einige Werte auf fehlende und andere Werte gleichzeitig recode.Typkonflikte vermeiden mit dplyr :: case_when
Allerdings, wenn ich versuche, Werte zu NA
zu setzen, bekomme ich eine Fehlermeldung, dass wir die Variable new
weil NA
s logisch nicht schaffen können:
Error in mutate_impl(.data, dots) :
Evaluation error: must be type double, not logical.
Gibt es einen Weg, um Werte zu NA
setzen in ein nicht logischer Vektor in einem Datenrahmen mit diesem?
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)
Sie können auch tun 'as.numeric (NA)' oder 'as.integer (NA)' für die 'NA' Fällen als' NA_real_' und 'NA_integer_' sind ein bisschen nervig, um sich daran zu erinnern und selten außerhalb solcher Dinge zu benutzen. – Marius
Schön. Auch zu zeigen: identisch (NA_real_, as.numeric (NA)) erzeugt TRUE. – user3614648
@hadley Diese Antwort ist mir jetzt klar, aber es dauerte eine Weile, bis ich es herausgefunden hatte. Es wäre sehr hilfreich, ein Beispiel dafür in der ordentlichen "case_when" -Dokumentation zu haben. In meinem Fall, wenn alle Werte für gruppierte Daten fehlten, erzeugte Mittelwert (x [1: 2], na.rm = T) ein NaN-Ergebnis. diese Fälle in NA_real_ umzukodieren, wurde behoben. –