2011-06-22 36 views
54

Tôi có tập dữ liệu với các hàng trống. Tôi muốn xóa chúng:Xóa các hàng trống của một tệp dữ liệu trong R

myData<-myData[-which(apply(myData,1,function(x)all(is.na(x)))),] 

Nó hoạt động OK. Nhưng bây giờ tôi muốn thêm một cột trong dữ liệu của tôi và khởi tạo giá trị đầu tiên:

myData$newCol[1] <- -999 

Error in `$<-.data.frame`(`*tmp*`, "newCol", value = -999) : 
    replacement has 1 rows, data has 0 

Đáng tiếc là nó không hoạt động và tôi thực sự không hiểu tại sao và tôi không thể giải quyết việc này. Tính năng này hoạt động khi tôi xóa một dòng tại một thời điểm bằng cách sử dụng:

TgData = TgData[2:nrow(TgData),] 

Hoặc bất kỳ thứ gì tương tự.

Nó cũng hoạt động khi tôi chỉ sử dụng 13.000 hàng đầu tiên.

Nhưng nó không hoạt động với dữ liệu thực tế của tôi, với 32.000 hàng.

Tôi đã làm gì sai? Nó dường như không có ý nghĩa với tôi.

+0

có thể trùng lặp của [loại bỏ hàng có NA trong data.frame] (http://stackoverflow.com/questions/4862178/remove-rows-with-nas-in-data-frame) –

Trả lời

73

Tôi giả sử bạn muốn xóa các hàng là tất cả NA. Sau đó, bạn có thể làm như sau:

data <- rbind(c(1,2,3), c(1, NA, 4), c(4,6,7), c(NA, NA, NA), c(4, 8, NA)) # sample data 
data 
    [,1] [,2] [,3] 
[1,] 1 2 3 
[2,] 1 NA 4 
[3,] 4 6 7 
[4,] NA NA NA 
[5,] 4 8 NA 

data[rowSums(is.na(data)) != ncol(data),] 
    [,1] [,2] [,3] 
[1,] 1 2 3 
[2,] 1 NA 4 
[3,] 4 6 7 
[4,] 4 8 NA 

Nếu bạn muốn loại bỏ các hàng có ít nhất một NA, chỉ cần thay đổi điều kiện:

data[rowSums(is.na(data)) == 0,] 
    [,1] [,2] [,3] 
[1,] 1 2 3 
[2,] 4 6 7 
+23

Trường hợp thứ hai cũng có thể được xử lý qua : 'data [complete.cases (data),]'. –

+0

Cảm ơn lời khuyên! – Wookai

+0

@JoshuaUlrich Thx cho câu trả lời trợ giúp của bạn! Chỉ vì sự hiểu biết? Tại sao bạn để một ',' vào cuối 'dữ liệu [complete.cases (dữ liệu),]' mã của bạn? – mrquad

26

Nếu bạn có hàng trống rỗng, không Nas, bạn có thể làm:

data[!apply(data == "", 1, all),] 

Để loại bỏ cả hai (NAS và trống):

data <- data[!apply(is.na(data) | data == "", 1, all),] 
+1

Tùy chọn này cũng hoạt động trên dữ liệu không phải là số. –

Các vấn đề liên quan