2009-09-08 11 views

Odpowiedz

1

Jeśli chcesz usunąć wiersze zawierające NA, możesz użyć apply(), aby zastosować szybką funkcję do sprawdzenia każdego wiersza. Na przykład, jeśli macierz jest x,

goodIdx <- apply(x, 1, function(r) !any(is.na(r))) 
newX <- x[goodIdx,] 
5

myślę na.rm pracuje zwykle tylko wewnątrz funkcji, powiedzmy dla oznaczać funkcję. pójdę z complete.cases: http://stat.ethz.ch/R-manual/R-patched/library/stats/html/complete.cases.htm

powiedzmy masz następującą macierz 3x3-:

x <- matrix(c(1:8, NA), 3, 3) 

> x 
    [,1] [,2] [,3] 
[1,] 1 4 7 
[2,] 2 5 8 
[3,] 3 6 NA 

następnie można uzyskać kompletne przypadki tej matrycy z

y <- x[complete.cases(x),] 

> y 
    [,1] [,2] [,3] 
[1,] 1 4 7 
[2,] 2 5 8 

Funkcja complete.cases zwraca wektor wartości prawdy, który określa, czy sprawa jest kompletna:

> complete.cases(x) 
[1] TRUE TRUE FALSE 

, a następnie indeksować wiersze macierzy x i dodać ",", aby powiedzieć, że chcesz wszystkie kolumny.

6

na.omit() zajmie matryce (i ramki danych) i zwróci tylko te wiersze bez żadnych wartości NA - jeden krok dalej zajmuje complete.cases(), usuwając dla ciebie wiersze FALSE.

> x <- data.frame(c(1,2,3), c(4, NA, 6)) 
> x 
    c.1..2..3. c.4..NA..6. 
1   1   4 
2   2   NA 
3   3   6 
> na.omit(x) 
    c.1..2..3. c.4..NA..6. 
1   1   4 
3   3   6 
Powiązane problemy