我有一个如下所示的数据框(我将其命名为 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 数据框)。
答案 0 :(得分:1)
代替summarise/merge
,使用mutate
在原始数据中创建一个新列
library(dplyr)
height_df <- height_df %>%
group_by(Group) %>%
mutate(avgHeight = mean(Height, na.rm = TRUE)) %>%
ungroup