2016-06-14 25 views
8

Tôi đã có khung dữ liệu có ID lô và kết quả của sáu thử nghiệm được thực hiện trên mỗi lô. Các dữ liệu trông như thế này:R: đếm NA cho mỗi hàng trong dataframe

batch_id test1 test2 test3 test4 test5 test6 
001  0.121  NA 0.340 0.877 0.417 0.662 
002  0.229 0.108  NA 0.638  NA 0.574 

(có một vài trăm hàng trong dataframe này, chỉ có một hàng cho mỗi BATCH_ID)

Tôi đang tìm kiếm một cách để đếm có bao nhiêu NA có cho từng batch_id (cho mỗi hàng). Tôi cảm thấy như thế này nên có thể làm được với một vài dòng mã R nhiều nhất, nhưng tôi đang gặp rắc rối thực sự mã hóa nó. Bất kỳ ý tưởng nào?

+1

@BenBolker Nói chung, tôi có ấn tượng rằng các câu trả lời cho các bài đăng gần đây thường phù hợp hơn, hiện đại hoặc hiệu quả hơn các bài đăng bị cáo buộc trùng lặp - đặc biệt nếu bài đăng trùng lặp được vài năm tuổi (không phải trường hợp ở đây). Tuy nhiên, trong trường hợp cụ thể này, tôi thậm chí không chắc chắn rằng chúng ta đang xử lý một bản sao vì câu hỏi được liên kết đặc biệt yêu cầu một giải pháp 'dplyr', không giống như OP của bài đăng này. – RHertel

+0

OK, mặc dù câu hỏi cụ thể này không phải là cũ (tháng Hai năm nay) và câu trả lời * (đặc biệt là câu trả lời của @ windrunn3r.1990) trùng lặp rất nhiều. Tôi có nên/chúng tôi bỏ phiếu để mở lại? –

+0

@BenBolker Tôi không thấy câu hỏi mà bạn đã liên kết khi tôi tìm kiếm giải pháp. Câu trả lời cho câu hỏi đó của Justin là những gì tôi đang tìm kiếm. Tôi có nên xóa câu hỏi của mình không? – Shark7

Trả lời

14

Bạn có thể thêm một cột mới vào khung dữ liệu của bạn có chứa các số NA giá trị mỗi batch_id:

df$na_count <- apply(df, 1, function(x) sum(is.na(x))) 
+1

Cảm ơn. Điều đó hoạt động. Tôi đã kết thúc bằng cách sử dụng này, đó là một chút đơn giản:
'df $ na_count <- áp dụng (is.na (df), 1, tổng hợp)' – Shark7

26

Bạn có thể đếm NA s trong mỗi hàng với lệnh này:

rowSums(is.na(dat)) 

trong đó dat là tên của khung dữ liệu của bạn.

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