簡體   English   中英

聚合並添加新列

[英]Aggregate and adding new column

我有一個包含地區名稱、家庭緯度和經度的數據集。 該數據集有2000 個家庭位置 我想根據地區名稱計算緯度和經度的平均值。 接下來,我想添加兩個新列(即 Lat_mean、Long_mean),其中將為每個家庭存儲平均 Lat 和 Long。

我只是能夠匯總緯度和經度的平均值。 我不知道如何將匯總數據粘貼為每個 ID 的新列(見代碼)

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”,每個 ID 將具有基於地區名稱的值。 見下圖。

圖像

我們可以使用mutate_at代替summarise_at list ,指定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  
> 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM