为什么将filter()放在不同的位置会得到不同的直方图?
下面是用于比较的两段代码-请注意,筛选器(n()>=100)的位置不同:为什么将filter()放在不同的位置会得到不同的直方图?,r,ggplot2,data-visualization,tidyverse,R,Ggplot2,Data Visualization,Tidyverse,下面是用于比较的两段代码-请注意,筛选器(n()>=100)的位置不同: library(tidyverse) library(dslabs) movielens %>% group_by(userId) %>% filter(n() >= 100) %>% summarise(mean_rating = mean(rating)) %>% ggplot(aes(mean_rating)) + geom_histogram(bins=30, co
library(tidyverse)
library(dslabs)
movielens %>%
group_by(userId) %>%
filter(n() >= 100) %>%
summarise(mean_rating = mean(rating)) %>%
ggplot(aes(mean_rating)) +
geom_histogram(bins=30, col="black")
及
这两段代码给出了两个不同的直方图。为什么会这样?它们不应该做相同的事情吗?在聚合函数(如Summary)后,“分组”没有意义,将被删除,n()返回完整数据帧的行数,而不是每个用户ID,比较这两个命令的输出:
movielens %>%
group_by(userId) %>%
summarise(mean_rating = mean(rating)) %>%
mutate(n = n())
# # A tibble: 671 x 3
# userId mean_rating n
# <int> <dbl> <int>
# 1 1 2.55 671
# 2 2 3.49 671
# 3 3 3.57 671
movielens %>%
group_by(userId) %>%
summarise(mean_rating = mean(rating)) %>%
group_by(userId) %>%
mutate(n = n())
# # A tibble: 671 x 3
# # Groups: userId [671]
# userId mean_rating n
# <int> <dbl> <int>
# 1 1 2.55 1
# 2 2 3.49 1
# 3 3 3.57 1
movierens%>%
分组人(用户ID)%>%
总结(平均(评级=平均(评级))%>%
变异(n=n())
##A tible:671 x 3
#用户ID平均值
#
# 1 1 2.55 671
# 2 2 3.49 671
# 3 3 3.57 671
电影%>%
分组人(用户ID)%>%
总结(平均(评级=平均(评级))%>%
分组人(用户ID)%>%
变异(n=n())
##A tible:671 x 3
##组:userId[671]
#用户ID平均值
#
# 1 1 2.55 1
# 2 2 3.49 1
# 3 3 3.57 1
在summary()之后,数据帧不是一个分组对象,过滤器不做任何事情,而在第一个示例中,您对分组对象应用过滤器(只有263个用户ID满足您的条件),然后将结果导入summary()。希望这能有所帮助。不,尝试使用第一个脚本的前两行(当然不是library()
),第二个脚本的前三行,然后您将看到差异,它应用于filter()
。
movielens %>%
group_by(userId) %>%
summarise(mean_rating = mean(rating)) %>%
mutate(n = n())
# # A tibble: 671 x 3
# userId mean_rating n
# <int> <dbl> <int>
# 1 1 2.55 671
# 2 2 3.49 671
# 3 3 3.57 671
movielens %>%
group_by(userId) %>%
summarise(mean_rating = mean(rating)) %>%
group_by(userId) %>%
mutate(n = n())
# # A tibble: 671 x 3
# # Groups: userId [671]
# userId mean_rating n
# <int> <dbl> <int>
# 1 1 2.55 1
# 2 2 3.49 1
# 3 3 3.57 1