2009-09-08 35 views

Trả lời

1

Nếu bạn muốn xóa các hàng có chứa NA, bạn có thể sử dụng hàm apply() để áp dụng hàm nhanh để kiểm tra từng hàng. Ví dụ, nếu ma trận của bạn là x,

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

Tôi nghĩ na.rm thường chỉ hoạt động trong phạm vi chức năng, nói cho nghĩa chức năng. Tôi sẽ đi với complete.cases: http://stat.ethz.ch/R-manual/R-patched/library/stats/html/complete.cases.htm

giả sử bạn có 3x3 ma trận sau:

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

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

sau đó bạn có thể nhận được các trường hợp hoàn toàn của ma trận này với

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

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

complete.cases -trả năng trả về một vectơ giá trị chân lý cho biết có hay không hoàn thành một trường hợp:

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

và sau đó bạn lập chỉ mục các hàng ma trận x và thêm "," để nói rằng bạn muốn tất cả các cột.

6

na.omit() sẽ lấy ma trận (và khung dữ liệu) và chỉ trả về những hàng không có giá trị NA - phải mất thêm complete.cases() một bước nữa bằng cách xóa các hàng FALSE cho bạn.

> 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 
Các vấn đề liên quan