Как считать строки в логическом векторе - PullRequest
0 голосов
/ 10 мая 2018

У меня есть фрейм данных с именем source, который выглядит примерно так

185  2002-07-04      NA      NA 20
186  2002-07-05      NA      NA 20
187  2002-07-06      NA      NA 20
188  2002-07-07  14.400   0.243 20
189  2002-07-08      NA      NA 20
190  2002-07-09      NA      NA 20
191  2002-07-10      NA      NA 20
192  2002-07-11      NA      NA 20
193  2002-07-12      NA      NA 20
194  2002-07-13   4.550   0.296 20
195  2002-07-14      NA      NA 20
196  2002-07-15      NA      NA 20
197  2002-07-16      NA      NA 20
198  2002-07-17      NA      NA 20
199  2002-07-18      NA      NA 20
200  2002-07-19      NA   0.237 20

, и когда я пытаюсь

> nrow(complete.cases(source))

, я получаю только NULL

, кто-то может объяснитьпочему это так и как я могу подсчитать, сколько строк без значений NA или NaN?

Ответы [ 3 ]

0 голосов
/ 10 мая 2018

complete.cases возвращает логический вектор, который указывает на завершенные строки.Поскольку вектор не имеет атрибута строки, вы не можете использовать nrow здесь, но как предложено другими sumsum TRUE и FALSE преобразуются внутренне в 1 и 0, поэтому использование sum подсчитывает TRUE значения вашего вектора.

sum(complete.cases(source))
# [1] 2

Если вас больше интересует data.frame, который остается после исключения всех неполных строк, вы можете использовать na.exclude.Это возвращает data.frame, и вы можете использовать nrow.

nrow(na.exclude(source))
# [1] 2

na.exclude(source)
#             V2    V3    V4 V5
# 188 2002-07-07 14.40 0.243 20
# 194 2002-07-13  4.55 0.296 20
0 голосов
/ 10 мая 2018

Вы даже можете попробовать:

source[rowSums(is.na(source))==0,]
#     V1         V2    V3    V4 V5
# 4  188 2002-07-07 14.40 0.243 20
# 10 194 2002-07-13  4.55 0.296 20

nrow(source[rowSums(is.na(source))==0,])
#[1] 2
0 голосов
/ 10 мая 2018

Вместо этого используйте sum.Хотя самым безопасным вариантом будет NROW (поскольку он может обрабатывать как data.frams, так и векторы)

sum(complete.cases(source))
#[1] 2

Или, если вы настаиваете на использовании nrow

nrow(source[complete.cases(source), ])
#[1] 2

Объяснение: complete.cases возвращает логический вектор, указывающий, какие дела (в ваших строках дел) завершены.


Образцы данных

source <- read.table(text = 
    "185  2002-07-04      NA      NA 20
186  2002-07-05      NA      NA 20
187  2002-07-06      NA      NA 20
188  2002-07-07  14.400   0.243 20
189  2002-07-08      NA      NA 20
190  2002-07-09      NA      NA 20
191  2002-07-10      NA      NA 20
192  2002-07-11      NA      NA 20
193  2002-07-12      NA      NA 20
194  2002-07-13   4.550   0.296 20
195  2002-07-14      NA      NA 20
196  2002-07-15      NA      NA 20
197  2002-07-16      NA      NA 20
198  2002-07-17      NA      NA 20
199  2002-07-18      NA      NA 20
200  2002-07-19      NA   0.237 20")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...