2016-06-14 5 views
8

У меня есть dataframe с идентификатором партии и результатами шести тестов, выполненных для каждой партии. Данные выглядит следующим образом:R: подсчет НС в строке в 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 

(есть несколько сотен строк в этом dataframe, только одна строка в batch_id)

Я ищу способ подсчитать, сколько NAs есть для каждого batch_id (для каждой строки). Я чувствую, что это должно быть сделано с несколькими строками кода R в лучшем случае, но у меня возникают проблемы с его кодированием. Любые идеи?

+1

@BenBolker Как правило, у меня создалось впечатление, что ответы на недавние сообщения часто более подходящие, современные или эффективные, чем в предполагаемых дубликатах, особенно если дублируемому сообщению несколько лет (не здесь). В этом конкретном случае, однако, я даже не уверен, что мы имеем дело с дубликатом, поскольку связанный вопрос специально задал решение 'dplyr', в отличие от OP этого сообщения. – RHertel

+0

ОК, хотя этот вопрос не тот, что старый (февраль этого года) и * ответы * (особенно ответ @ windrunn3r.1990) перекрывают много. Должен ли я/мы голосовать за открытие? –

+0

@BenBolker Я не видел вопроса, с которым вы связались, когда искал решение. Ответ на этот вопрос Джастина - это то, что я искал. Должен ли я удалить свой вопрос? – Shark7

ответ

14

Вы можете добавить новый столбец в кадр данных, содержащий количество NA значений за batch_id:

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

Спасибо. Это работает. Я закончил использовать это, что немного проще:
'df $ na_count <- apply (is.na (df), 1, sum)' – Shark7

26

Вы можете рассчитывать NA с в каждой строке с этой командой:

rowSums(is.na(dat)) 

где dat - это имя вашего фрейма данных.

Смежные вопросы