na.rm не работает и не может вычислить среднее значение

#r

#r

Вопрос:

Я пытаюсь рассчитать среднее значение для каждого города, в котором более 50 000 положительных тестов на covid. Когда я пытаюсь выполнить следующий код:

 covidJoined %>% group_by(Admin2) %>% filter(numOfCases > 50000) %>% slice(which.max(numOfCases)) %>% mean(as.numeric(covidJoined$Population), na.rm = TRUE)  
  

Я получаю следующую ошибку: аргумент не является числовым или логическим: возврат NA

Как я могу это исправить?

 summary(covidJoined)
    Admin2               Lat            Long_            date             numOfCases       Population     
 Length:15240       Min.   : 0.00   Min.   :-123.9   Length:15240       Min.   :     0   Min.   :   1175  
 Class :character   1st Qu.:36.44   1st Qu.:-122.0   Class :character   1st Qu.:     1   1st Qu.:  45578  
 Mode  :character   Median :37.98   Median :-120.8   Mode  :character   Median :    77   Median : 179140  
                    Mean   :36.58   Mean   :-116.7                      Mean   :  4108   Mean   : 642310  
                    3rd Qu.:39.20   3rd Qu.:-119.8                      3rd Qu.:  1389   3rd Qu.: 685306  
                    Max.   :41.74   Max.   :   0.0                      Max.   :271371   Max.   :9818605  
                                                                                         NA's   :508



 str(covidJoined)
tibble [15,240 x 6] (S3: tbl_df/tbl/data.frame)
 $ Admin2    : chr [1:15240] "Alameda" "Alameda" "Alameda" "Alameda" ...
 $ Lat       : num [1:15240] 37.6 37.6 37.6 37.6 37.6 ...
 $ Long_     : num [1:15240] -122 -122 -122 -122 -122 ...
 $ date      : chr [1:15240] "1/22/20" "1/23/20" "1/24/20" "1/25/20" ...
 $ numOfCases: num [1:15240] 0 0 0 0 0 0 0 0 0 0 ...
 $ Population: num [1:15240] 1510271 1510271 1510271 1510271 1510271 ...  
  

Комментарии:

1. Проблема не na.rm в этом. Проблема в том, что вы передаете data.frame в mean . Я думаю, вы хотите что-то вроде summarise(mean(as.numeric(Population), na.rm = TRUE))

2. Привет, Стефан! Я получаю 1 Лос-Анджелес 9818605 2 Оранжевый 3010232 3 Риверсайд 2189641 4 Сан-Бернардино 2035210 Я хотел бы получить среднее из этих 4

3. Это потому, что ваш df сгруппирован. Добавьте ungroup перед подведением итогов.

Ответ №1:

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

 covidJoined %>%
  filter(numOfCases > 50000) %>%
  group_by(Admin2) %>%
  summarise(avg_Pop = mean(Population))
  

Комментарии:

1. Привет, Алекс! Я получаю 1 Лос-Анджелес 9818605 2 Оранжевый 3010232 3 Риверсайд 2189641 4 Сан-Бернардино 2035210 Я хотел бы получить среднее из этих 4

2. Удалите group_by() строку, если вам нужно общее среднее значение.