Seite 1 von 1
Fehlermeldung "NAs introduced by coercion"
Verfasst: Di Mär 10, 2020 11:22 pm
von sabrina5678
Hallo!
Ich benutze diesen Datensatz:
https://www.dropbox.com/s/qeciwezjg6pfx ... r.sav?dl=0
mit folgenden Paketen:
Code: Alles auswählen
library(car); library(ggplot2); library(haven); library(lavaan); library(psych); library(pwr)
Wenn ich nun einen Datensatz erstellen möchte, kommt diese Fehlermeldung:
"NAs introduced by coercionError: Can't use numeric NA as column index with `[`."
Code: Alles auswählen
d <- data.frame(
female = d_raw$d10 - 1,
sex = factor(d_raw$d10, labels = c("male", "female")),
age = d_raw$d11,
iNet_info <- recode(d_raw$qc10, "7='iNet'; 6='sozNet'; c(1,2,3,4,5,8,9,10,11)='sonst'"),
impf_einst = rowMeans(d_raw[vars_impf_einst], na.rm = TRUE),
Impf_zuv = recode(d_raw$qc2, "1=5; 2=4; 3=3; 4=2; 5=1; 6=NA")
)
Die eingespeisten Variablen habe ich davor wie folgt definiert:
Code: Alles auswählen
# Speichern der Ausgangsdaten als "d_raw"
d_raw <- read_spss("eurobarometer.sav")
#Impfeinstellung definieren: (5 als fehlender Wert behandeln, da dieser die Ausprägung "Don't know"hat):
d_raw$qc8_1[d_raw$qc8_1==5]<-NA
d_raw$qc8_2[d_raw$qc8_2==5]<-NA
d_raw$qc8_3[d_raw$qc8_3==5]<-NA
d_raw$qc8_4[d_raw$qc8_4==5]<-NA
d_raw$qc8_5[d_raw$qc8_5==5]<-NA
vars_impf_einst <- c(d_raw$qc8_1, d_raw$qc8_2, d_raw$qc8_3, d_raw$qc8_4, d_raw$qc8_5)
#Internet und Social Media als vertrauenswürdigste Inmpf-Informationsquellen definieren:
iNet_info <- recode(d_raw$qc10, "7='iNet'; 6='sozNet'; c(1,2,3,4,5,8,9,10,11)='sonst'")
#Erwartung der Impf-Zuverlässigkeit (5 und 6 als fehlenden Wert behandeln)
d_raw$qc2[d_raw$qc2==6]<-NA
d_raw$qc2[d_raw$qc2==5]<-NA
Impf_zuv <- car::recode(d_raw$qc2, "1=4; 2=3; 3=2; 4=1; 5=NA; 6=NA")
Hat jemand eine Idee, was ich ändern muss, um die Fehlermeldung wegzubekommen?
Vielen Dank im Voraus!
Re: Fehlermeldung "NAs introduced by coercion"
Verfasst: Mi Mär 11, 2020 8:09 am
von jogo
Hallo Sabrina,
auf die Schnelle würde ich sagen, es sollte
Code: Alles auswählen
vars_impf_einst <- c("qc8_1", "qc8_2", "qc8_3", "qc8_4", "qc8_5")
heißen.
Übrigens bekomme ich bei Deinem ursprünglichen Code den Fehler:
Code: Alles auswählen
Fehler: Can't use numeric NA as column index with `[`.
Call `rlang::last_error()` to see a backtrace
Da ist noch ein Fehler, es muss heißen:
Code: Alles auswählen
iNet_info = recode(d_raw$qc10, "7='iNet'; 6='sozNet'; c(1,2,3,4,5,8,9,10,11)='sonst'"),
Wenn Du die haven_labelled-Objekte loswerden willst, empfehle ich:
Code: Alles auswählen
d <- data.frame(
female = as.numeric(d_raw$d10) - 1,
sex = factor(d_raw$d10, labels = c("male", "female")),
age = as.numeric(d_raw$d11),
iNet_info = recode(as.numeric(d_raw$qc10), "7='iNet'; 6='sozNet'; else='sonst'"),
impf_einst = rowMeans(d_raw[vars_impf_einst], na.rm = TRUE),
Impf_zuv = recode(as.numeric(d_raw$qc2), "1=5; 2=4; 3=3; 4=2; 5=1; 6=NA")
)
Vielleicht gefällt Dir bei $female ein logic:
Du behandelst $qc2 zweimal, einmal im originalen Dataframe:
Code: Alles auswählen
#Erwartung der Impf-Zuverlässigkeit (5 und 6 als fehlenden Wert behandeln)
d_raw$qc2[d_raw$qc2==6]<-NA
d_raw$qc2[d_raw$qc2==5]<-NA
und einmal bei der Erstellung des neuen Dataframes. Auch generierst Du das Objekt
Impf_zuv auch nochmal außerhalb des neuen Dataframes.
Bei mir sieht es derzeit so aus:
Code: Alles auswählen
library(haven); library(car);
# library(ggplot2); library(lavaan); library(psych); library(pwr)
# Speichern der Ausgangsdaten als "d_raw"
d_raw <- read_spss("eurobarometer.sav")
#Impfeinstellung definieren: (5 als fehlender Wert behandeln, da dieser die Ausprägung "Don't know"hat):
vars_impf_einst <- paste0("qc8_", 1:5)
is.na(d_raw[, vars_impf_einst]) <- as.matrix(d_raw[, vars_impf_einst])==5
d <- data.frame(
female = as.numeric(d_raw$d10) == 2,
sex = factor(d_raw$d10, labels = c("male", "female")),
age = as.numeric(d_raw$d11),
iNet_info = recode(as.numeric(d_raw$qc10), "7='iNet'; 6='sozNet'; else='sonst'"),
impf_einst = rowMeans(d_raw[vars_impf_einst], na.rm = TRUE),
Impf_zuv = recode(as.numeric(d_raw$qc2), "1=5; 2=4; 3=3; 4=2; 5=1; 6=NA")
)
Gruß, Jörg
Re: Fehlermeldung "NAs introduced by coercion"
Verfasst: Mi Mär 11, 2020 12:44 pm
von sabrina5678
Hey Jörg,
danke für deine Hilfe.
Wenn ich folgenden/deinen data.frame erstellen möchte
Code: Alles auswählen
library(haven); library(car);
# library(ggplot2); library(lavaan); library(psych); library(pwr)
# Speichern der Ausgangsdaten als "d_raw"
d_raw <- read_spss("eurobarometer.sav")
#Impfeinstellung definieren: (5 als fehlender Wert behandeln, da dieser die Ausprägung "Don't know"hat):
vars_impf_einst <- paste0("qc8_", 1:5)
is.na(d_raw[, vars_impf_einst]) <- as.matrix(d_raw[, vars_impf_einst])==5
d <- data.frame(
female = as.numeric(d_raw$d10) == 2,
sex = factor(d_raw$d10, labels = c("male", "female")),
age = as.numeric(d_raw$d11),
iNet_info = recode(as.numeric(d_raw$qc10), "7='iNet'; 6='sozNet'; else='sonst'"),
impf_einst = rowMeans(d_raw[vars_impf_einst], na.rm = TRUE),
Impf_zuv = recode(as.numeric(d_raw$qc2), "1=5; 2=4; 3=3; 4=2; 5=1; 6=NA")
)
erhalte ich jedoch immernoch die Fehlermeldung "NAs introduced by coercion". Kann ich diese dann einfach ignorieren, bzw. erhälst du diese Fehlermeldung nicht?
Die Ausprägungen der Variable vars_impf_einst sollte ich zusätzlich noch rekodieren, also 1=4; 2=3; 3=2; 4=1, und 5 wie gehabt als fehlenden Wert.
An welcher Stelle füge ich denn dann die Rekodierung am besten ein? Ich nehme an, erst bei der Erstellung des data.frame ? Wenn ja, einfach nach dem Befehl na.rm=True?
Also praktisch so?:
Code: Alles auswählen
d <- data.frame(
female = as.numeric(d_raw$d10) == 2,
sex = factor(d_raw$d10, labels = c("male", "female")),
age = as.numeric(d_raw$d11),
iNet_info = recode(as.numeric(d_raw$qc10), "7='iNet'; 6='sozNet'; else='sonst'"),
impf_einst = rowMeans(d_raw[vars_impf_einst], na.rm = TRUE, "1=4; 2=3; 3=2; 4=1"),
Impf_zuv = recode(as.numeric(d_raw$qc2), "1=5; 2=4; 3=3; 4=2; 5=1; 6=NA")
)
Re: Fehlermeldung "NAs introduced by coercion"
Verfasst: Mi Mär 11, 2020 12:55 pm
von jogo
Hallo Sabrina,
sabrina5678 hat geschrieben: Mi Mär 11, 2020 12:44 pm
Wenn ich folgenden/deinen data.frame erstellen möchte
Code: Alles auswählen
library(haven); library(car);
# library(ggplot2); library(lavaan); library(psych); library(pwr)
# Speichern der Ausgangsdaten als "d_raw"
d_raw <- read_spss("eurobarometer.sav")
#Impfeinstellung definieren: (5 als fehlender Wert behandeln, da dieser die Ausprägung "Don't know"hat):
vars_impf_einst <- paste0("qc8_", 1:5)
is.na(d_raw[, vars_impf_einst]) <- as.matrix(d_raw[, vars_impf_einst])==5
d <- data.frame(
female = as.numeric(d_raw$d10) == 2,
sex = factor(d_raw$d10, labels = c("male", "female")),
age = as.numeric(d_raw$d11),
iNet_info = recode(as.numeric(d_raw$qc10), "7='iNet'; 6='sozNet'; else='sonst'"),
impf_einst = rowMeans(d_raw[vars_impf_einst], na.rm = TRUE),
Impf_zuv = recode(as.numeric(d_raw$qc2), "1=5; 2=4; 3=3; 4=2; 5=1; 6=NA")
)
erhalte ich jedoch immernoch die Fehlermeldung "NAs introduced by coercion". Kann ich diese dann einfach ignorieren, bzw. erhälst du diese Fehlermeldung nicht?
richtig, ich erhalte die Fehlermeldung nicht.
Fehlermeldungen dieser Art sind durchaus beachtenswert.
Ist denn die Datei, die Du einliest identisch mit der, die Du in die Dropbox gestellt hast?
Gruß, Jörg
Re: Fehlermeldung "NAs introduced by coercion"
Verfasst: Mi Mär 11, 2020 1:46 pm
von sabrina5678
Hey Jörg,
ja, das ist der identische Datensatz.
Mir ist aufgefallen, dass die Fehlermeldung immer nur in einem R-Markdown Dokument erscheint. Wenn ich den dataframe in einem R-Skript erstelle, erhalte ich auch keine Fehlermeldung.
Da ich das Dokument abschließend jedoch knittn muss, muss ich ein R-Markdown Dokument benutzen..
Kann dies denn möglich sein, dass es an dem R-Markdown liegt mit der Fehlermeldung?
Lg
Re: Fehlermeldung "NAs introduced by coercion"
Verfasst: Mi Mär 11, 2020 2:54 pm
von jogo
Hallo Sabrina,
es gibt zumindest Umstände, die dazu führen, dass beim Stricken die Umgebung etwas anders aussieht als beim Abarbeiten des R-Skriptes.
https://stackoverflow.com/search?q=%5Br ... n+knitting
Gruß, Jörg
Re: Fehlermeldung "NAs introduced by coercion"
Verfasst: Mi Mär 11, 2020 3:10 pm
von bigben
Hi!
sabrina5678 hat geschrieben: Mi Mär 11, 2020 1:46 pmKann dies denn möglich sein, dass es an dem R-Markdown liegt mit der Fehlermeldung?
Würde es denn sehr weh tun, Jörgs Code außerhalb von Markdown in der Console auszuprobieren? Das würde die Frage doch schneller beantworten als ein Post hier.
LG,
Bernhard
Re: Fehlermeldung "NAs introduced by coercion"
Verfasst: Mi Mär 11, 2020 4:01 pm
von jogo
Hallo Bernhard,
soweit ich die vorherige Nachricht von Sabrina verstanden habe, hat sie das getan.
"Wenn ich den dataframe in einem R-Skript erstelle, erhalte ich auch keine Fehlermeldung."
Gruß, Jörg
Re: Fehlermeldung "NAs introduced by coercion"
Verfasst: Mi Mär 11, 2020 7:11 pm
von sabrina5678
Hallo zusammen,
wie Jörg es richtig verstanden hat, habe ich dies bereits ausprobiert.
Die Fehlermeldung erscheint bei mir jedoch sofort im R-Markdown und nicht erst beim knitten des Dokuments (wie es der Link thematisiert von dir Jörg).
Was es auf sich hat mit der Fehlermeldung im R-Markdown und ich anders machen sollte, bekomme ich folglich leider nicht raus -.-
Für jegliche Ideen und Tipps, wäre ich daher sehr dankbar!
Lg
Re: Fehlermeldung "NAs introduced by coercion"
Verfasst: Do Mär 12, 2020 2:09 pm
von jogo
Hallo Sabrina,
da wir diesen Fehler nicht reproduzieren können, ist es unmöglich dezidierte Hinweise zu geben.
Mein Vorgehen in so einer Situation wäre:
- Versionsnummern von RStudio (und eventuell auch von R) überprüfen, ggf. aktualisieren
- Code-chunks soweit reduzieren/eleminieren, um das Problem einzugrenzen
- Code-chunks, die Diagnoseinfo liefern, einbauen. getwd(); sessionInfo()
- frisches RMarkdown-Dokument aufsetzen bis zum ersten Code-chunk, ...
Gruß, Jörg