2017-11-26 4 views
3

Wie definiere ich mehrere Werte als fehlende in einem Datenrahmen in R?Definieren Sie mehrere Werte als fehlend in einem Datenrahmen

Betrachten sie einen Datenrahmen, in dem zwei Werte „888“ und „999“, stellen Daten fehlen:

df <- data.frame(age=c(50,30,27,888),insomnia=c("yes","no","no",999)) 
df[df==888] <- NA 
df[df==999] <- NA 

Diese Lösung nimmt eine Codezeile pro Wert, die fehlenden Daten. Haben Sie eine einfachere Lösung für Situationen, in denen die Anzahl der Werte für fehlende Daten hoch ist?

+2

Versuchen 'df [df == 888 | df == 999] <- NA', da diese in zwei verschiedenen Spalten – akrun

+2

als alt, könnten Sie wandeln sie mit 'na.strings' beim Einlesen bei' read.table' (und Variationen) zB 'na.strings = c (", 888, 999) " – user20650

Antwort

2

Hier sind drei Lösungen:

# 1. Data set 
df <- data.frame(
    age = c(50, 30, 27, 888), 
    insomnia = c("yes", "no", "no", 999)) 

# 2. Solution based on "one line of code per missing data value" 
df[df == 888] <- NA 
df[df == 999] <- NA 
is.na(df) 

# 3. Solution based on "applying function to each column of data set" 
df[sapply(df, function(x) as.character(x) %in% c("888", "999"))] <- NA 
is.na(df) 

# 4. Solution based on "dplyr" 

# 4.1. Load package 
library(dplyr) 

# 4.2. Define function for missing values 
is_na <- function(x){ 
return(as.character(x) %in% c("888", "999")) 
} 

# 4.3. Apply function to each column 
df %>% lapply(is_na) 
1

Dies sollte

> rm(list = ls()) 
> df1 <- df2 <- 
+ data.frame(age=c(50,30,27,888),insomnia=c("yes","no","no",999)) 
> df1[df1==888] <- NA 
> df1[df1==999] <- NA 
> 
> df2[sapply(df2, "%in%", table = c(888, 999))] <- NA 
> all.equal(df1, df2) 
[1] TRUE 

arbeiten können Sie die oben verwenden, in denen Sie ein Objekt zuweisen Werte Kennungen fehlen, die als Sie als table Argument übergeben.

Verwandte Themen