Агрегировать и добавлять новый столбец - PullRequest
1 голос
/ 27 сентября 2019

У меня есть набор данных с названием района, широтой домохозяйства и долготой.Набор данных имеет 2000 домохозяйств .Я хочу рассчитать среднее значение широты и долготы на основе названия района.Затем я хочу добавить два новых столбца (т. Е. Lat_mean, Long_mean), в которых средние значения широты и долготы будут храниться для каждого домашнего хозяйства.

Я только что смог объединить средние значения для широты и долготы.Я не знаю, как вставить обобщенные данные в качестве нового столбца для каждого идентификатора (см. Код)

id <- c(1,2,3,4,5,6)
district <- c("A", "B", "C", "A", "A", "B")
lat <- c(28.6, 30.2, 35.9, 27.5, 27.9, 31.5)
long <- c(77.5, 85.2, 66.5, 75.0, 79.2, 88.8)
df <- data.frame(id, district, lat, long)

df_group <- df %>% group_by(district) %>% summarise_at(vars(lat:long), mean)

Я ожидаю следующего.Столбцы Lat_mean и Long_mean будут добавлены в 'df', и каждый идентификатор будет иметь значения, основанные на названии района.Смотрите изображение ниже.

img

Ответы [ 2 ]

3 голосов
/ 27 сентября 2019

Мы можем использовать mutate_at вместо summarise_atlist укажите name, чтобы он создал новый столбец с suffix в качестве этого имени

library(dplyr)
df %>% 
   group_by(district) %>%
   mutate_at(vars(lat, long), list(mean = mean))
# A tibble: 6 x 6
# Groups:   district [3]
#     id district   lat  long lat_mean long_mean
#  <dbl> <fct>    <dbl> <dbl>    <dbl>     <dbl>
#1     1 A         28.6  77.5     28        77.2
#2     2 B         30.2  85.2     30.8      87  
#3     3 C         35.9  66.5     35.9      66.5
#4     4 A         27.5  75       28        77.2
#5     5 A         27.9  79.2     28        77.2
#6     6 B         31.5  88.8     30.8      87  
1 голос
/ 27 сентября 2019
> df %>% 
    mutate(lat_mean = ave(lat, district, FUN=mean),
           lon_mean = ave(long, district, FUN=mean))
  id district  lat long lat_mean lon_mean
1  1        A 28.6 77.5    28.00 77.23333
2  2        B 30.2 85.2    30.85 87.00000
3  3        C 35.9 66.5    35.90 66.50000
4  4        A 27.5 75.0    28.00 77.23333
5  5        A 27.9 79.2    28.00 77.23333
6  6        B 31.5 88.8    30.85 87.00000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...