2017-10-16 2 views
-2

hat ich eine Funktion, die in einem Datenrahmen nahm und gab den Mittelwert und Median für numerische Variablen in diesem Datenrahmen. Wenn ich die Funktion teste, gibt es 3 Nullwerte. Wie würde ich Nullwerte davon entfernen?Wie NULL-Werte entfernen in einer Liste

df.numeric.summary <- function(data.frame1){ 

variable.list=list() 
numcols <- sapply(data,is.numeric) 
for(i in 1:ncol(data.frame1)){ 
    if (is.numeric(data.frame1[[i]]) == TRUE) { 

    variable.list[[i]]=list(c("Mean"=mean(data.frame1[[i]], na.rm = TRUE),"Median"=median(data.frame1[[i]]), "IQR"=IQR(data.frame1[[i]]))) 
    } 
} 
return(variable.list) 
} 

Meine Ausgabe sieht wie folgt aus:

[[1]] 
NULL 

[[2]] 
NULL 

[[3]] 
NULL 

[[4]] 
[[4]][[1]] 
    Mean Median  IQR 
10.76687 3.56400 7.75100 


[[5]] 
[[5]][[1]] 
    Mean Median  IQR 
10.43467 1.40000 4.50100 


[[6]] 
[[6]][[1]] 
    Mean Median  IQR 
3.701434 0.839000 2.429500 

während die Ausgabe wie diese

$Pb1 
    Mean Median  IQR 
10.76687 3.56400 7.75100 

$Pb2 
    Mean Median  IQR 
10.43467 1.40000 4.50100 

$Pb3 
    Mean Median  IQR 
3.701434 0.839000 2.429500 
+1

Meinst du NULL oder NA? Sie sind in R anders. Bitte geben Sie ein Beispiel für die Reproduzierbarkeit (Beispiel: https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) mit Beispiel-Eingabedaten an. – MrFlick

+0

Ich habe meinen Code hinzugefügt. – Hannah

+0

Und was genau ist die gewünschte Ausgabe. Sie ordnen 'variable.list [[i]]' zu, aber dann 'i = 1' scheint die Spalte nicht numerisch zu sein. Also ist das erste Mal, wenn Sie zuweisen, wenn "i = 4", was diese NULL-Werte belässt. – MrFlick

Antwort

0

So viel einfacher wäre hilfreich, wenn Sie nur Filter() und Map() Zum Beispiel verwendet

df.numeric.summary <- function(data.frame1){ 
    my_summary <- function(x) c(
     "Mean"=mean(x, na.rm = TRUE), 
     "Median"=median(x, na.rm=TRUE), 
     "IQR"=IQR(x, na.rm=TRUE)) 

    Map(my_summary, Filter(is.numeric, data.frame1)) 
} 

Sie kann mit

testen
df.numeric.summary(iris) 
0

Sie haben aussehen sollte na.rm=TRUE

x <- c(1,2,5,7,NA,3) 
mean(x) # returns NA 
# [1] NA 
mean(x, na.rm=TRUE) # returns 3.6 
# [1] 3.6 

in ähnlicher Weise für mittlere calcul verwenden aktion.

0

Passing na.rm = T in Ihrem lapply oder sapply als Option während mean oder median Berechnung sollte

> iris1 <- iris 
> 
> #imputing NA 
> 
> iris1[2,3] <- NA 
> 
> iris1[3,2] <- NA 
> 
> #without na.rm 
> 
> lapply(iris1[1:4], mean) 
$Sepal.Length 
[1] 5.843333 

$Sepal.Width 
[1] NA 

$Petal.Length 
[1] NA 

$Petal.Width 
[1] 1.199333 

> 
> 
> lapply(iris1[1:4], mean, na.rm = T) 
$Sepal.Length 
[1] 5.843333 

$Sepal.Width 
[1] 3.056376 

$Petal.Length 
[1] 3.773826 

$Petal.Width 
[1] 1.199333 

> 
> lapply(iris1[1:4], median, na.rm = T) 
$Sepal.Length 
[1] 5.8 

$Sepal.Width 
[1] 3 

$Petal.Length 
[1] 4.4 

$Petal.Width 
[1] 1.3 
+0

Ich habe nicht den lapply oder sapply Funktionen nutzen – Hannah

+0

@Hannah Dass wir nur zu wissen, wäre in der Lage, wenn Sie den Code teilen, die Sie versucht haben. – amrrs

+0

Ich aktualisierte die Frage mit meinem Code – Hannah

Verwandte Themen