对一组行进行分组以找到平均值,然后使用 R 中的数据框将平均值重新分配给每行

时间:2021-05-04 02:09:31

标签: r dataframe group-by

我有一个如下所示的数据框(我将其命名为 height_df)

[No]   [Name]    [Height]    [Group]
 1      aaa        170.8       1
 2      aab        171.8       1
 3      aac        177.1       2
 4      aad        175.5       2
 5      aae        170.3       1
 6      aaf        172.4       1
 7      aag        180.1       3
 8      aah        169.4       1
 9      aai        181.8       3
 10     aaj        170.1       1
 11     aak        183.3       3
 12     aal        169.8       1

height_df <- data.frame(
      Name = c("aaa", "aab", "aac", "aad", "aae", "aaf", "aag", "aah", "aai", "aaj", "aak", "aal"),
      Height = c(170.8,171.8,177.1,175.5,170.3,172.4,180.1,169.4,181.8,170.1,183.3,169.8), 
      Group = c(1,1,2,2,1,1,3,1,3,1,3,1))

我想创建一个如下所示的数据框。

[No]   [Name]    [Height]    [Group]   [Avg_Height]
 1      aaa        170.8       1
 2      aab        171.8       1
 3      aac        177.1       2
 4      aad        175.5       2
 5      aae        170.3       1
 6      aaf        172.4       1
 7      aag        180.1       3
 8      aah        169.4       1
 9      aai        181.8       3
 10     aaj        170.1       1
 11     aak        183.3       3
 12     aal        169.8       1

以下是我使用的步骤。我首先用'dplyr'找到了每组的平均身高。

grouped_heights <- height_df %>% group_by(Group) %>% summarize(avgHeight = mean(Height))

然后我使用以下代码将平均值重新分配给每个 height_df 数据框

join <- merge(height_df, grouped_heights, by.x=3, by.y=2)

我想知道是否有办法立即完成而不必创建临时数据框(在这种情况下,我临时创建了 grouped_heights 数据框)。

1 个答案:

答案 0 :(得分:1)

代替summarise/merge,使用mutate在原始数据中创建一个新列

library(dplyr)
height_df <- height_df %>% 
   group_by(Group) %>%
   mutate(avgHeight = mean(Height, na.rm = TRUE)) %>%
   ungroup
相关问题