Как суммировать символы, факторы и числовые векторы в R

Я пытаюсь использовать summ_all, чтобы найти среднее значение каждого идентификатора. Я могу сделать это успешно для столбца ID и столбца, для которого я пытаюсь найти среднее значение (скорость). Однако, когда я использую приведенный ниже код, все остальные столбцы возвращаются как NA.

Вторая проблема заключается в том, что некоторые идентификаторы имеют несколько местоположений или драйверов. Поэтому мне нужно сохранить скорость, усредненную драйвером, но иметь несколько строк, которые поддерживают уникальный драйвер и местоположение (дата не имеет значения)

Я подумал, что это может быть связано с тем, что столбцы, которые возвращаются как NA, не являются числовыми. Я пытался просмотреть другие вопросы, но не смог найти ответа на вопрос, почему это происходит и как это исправить.

Я также пытался использовать функцию агрегата(), но происходит то же самое.

Это код, который я сейчас использую:

library(dplyr)
avg <- bind %>%
group_by(ID) %>%
summarize_all(mean)

Вот как выглядят мои данные:

ID Speed Location Driver Date
2  100     a        1     M
2  145     a        1     M
5  155     b        1     M
4  100     a        2     T
3  135     b        2     T
3  156     b        3     T
4  167     b        3     W

Вот как я хотел бы, чтобы окончательный набор данных выглядел так:

ID Speed Location Driver Date
2  122.5   a        1     M
5  155     b        1     M
4  133     a        2     T
4  133     b        3     W
3  145.5   b        2     T
3  145.5   b        3     T

Пока мой результат выглядит так:

ID Speed Location Driver Date
2  122.5   NA      NA     NA
5  155     NA      NA     NA
4  133     NA      NA     NA
4  133     NA      NA     NA
3  145.5   NA      NA     NA
3  145.5   NA      NA     NA

с кодом ошибки:

There were 50 or more warnings (use warnings() to see the first 50)

person Cae.rich    schedule 21.05.2019    source источник
comment
@akrun: я думаю, что они получают NA при попытке использовать summarise_all. Ваш удаленный ответ показался мне правильным, я как раз собирался опубликовать то же самое.   -  person Marius    schedule 21.05.2019
comment
Извините, я ввел неправильный пример кода. Я исправил это сейчас. @akrun   -  person Cae.rich    schedule 21.05.2019
comment
Просто хочу отметить, что это предупреждение, а не ошибка. Код все еще должен работать   -  person camille    schedule 21.05.2019


Ответы (1)


Мы могли бы заменить «Скорость» на mean «Скорость», а затем получить distinct строк.

library(dplyr)
bind %>%
    group_by(ID) %>%
    mutate(Speed = mean(Speed)) %>%
    distinct()
# A tibble: 6 x 5
# Groups:   ID [4]
#     ID Speed Location Driver Date 
#  <int> <dbl> <chr>     <int> <chr>
#1     2  122. a             1 M    
#2     5  155  b             1 M    
#3     4  134. a             2 T    
#4     3  146. b             2 T    
#5     3  146. b             3 T    
#6     4  134. b             3 W    

NA в других столбцах будут результатом вызова mean для нечисловых столбцов.

person akrun    schedule 21.05.2019
comment
Спасибо! Есть ли способ суммировать нечисловые столбцы? например, один, если мои столбцы имеют одинаковое значение для каждого идентификатора. Я бы хотел, чтобы это было прикреплено к каждому среднему значению. - person Cae.rich; 21.05.2019
comment
@Cae.rich Как вы хотите суммировать нечисловые столбцы. mean работает только с числовыми столбцами. например, когда у вас есть такие значения, как «M», W, вы хотите получить M.W - person akrun; 21.05.2019
comment
@Cae.rich Если вы хотели получить distinct, bind %>% group_by(ID) %>% mutate(Speed = mean(Speed)) %>% distinct() - person akrun; 21.05.2019