我想知道一种将汇总统计信息添加回数据帧的每一行的整合方法。
下面的代码有效,但应该是一个更快的方法,对吧?
library("tidyverse")
data <- (iris)
means <- iris %>%
group_by(Species) %>%
summarise(
Sepal.Length = mean(Sepal.Length),
Sepal.Width = mean(Sepal.Width)
)
data <- merge(data, means, by = "Species")
一种方法是使用mutate。
library("tidyverse")
data <- (iris)
data<-data %>%
group_by(Species) %>%
mutate(Sepal.Length.y=mean(Sepal.Length), Sepal.Width.y=mean(Sepal.Width))
所以这与你之前的相似,但是只需要几步。如果要重新排列列的顺序,可以重新排序。另外,我建议您在帖子中更改Sepal.Length和Sepal.Width中的列名,但如果您没有指定唯一名称,则只需在其上添加.y即可使其唯一。希望这可以帮助。
你可以用dplyr::mutate_at
做到这一点:
iris %>% group_by(Species) %>%
mutate_at(.vars = vars(Sepal.Length,Sepal.Width),
.funs = list(mean = ~mean))
我们需要list(mean = ~mean)
位,而不仅仅是.funs = mean
来重命名列,而不是写原始列。
# A tibble: 150 x 7
# Groups: Species [3]
Sepal.Length Sepal.Width Petal.Length Petal.Width Species Sepal.Length_mean Sepal.Width_mean
<dbl> <dbl> <dbl> <dbl> <fct> <dbl> <dbl>
1 5.1 3.5 1.4 0.2 setosa 5.01 3.43
2 4.9 3 1.4 0.2 setosa 5.01 3.43
3 4.7 3.2 1.3 0.2 setosa 5.01 3.43
4 4.6 3.1 1.5 0.2 setosa 5.01 3.43
5 5 3.6 1.4 0.2 setosa 5.01 3.43
6 5.4 3.9 1.7 0.4 setosa 5.01 3.43
7 4.6 3.4 1.4 0.3 setosa 5.01 3.43
8 5 3.4 1.5 0.2 setosa 5.01 3.43
9 4.4 2.9 1.4 0.2 setosa 5.01 3.43
10 4.9 3.1 1.5 0.1 setosa 5.01 3.43