1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > R语言summarize()函数输出message: summarise()` ungrouping output (override with `.groups` argument)

R语言summarize()函数输出message: summarise()` ungrouping output (override with `.groups` argument)

时间:2020-06-16 15:57:57

相关推荐

R语言summarize()函数输出message: summarise()` ungrouping output (override with `.groups` argument)

R语言group_by()下summarize()函数输出message

group_by()下使用summarize()函数输出如下message,意思是说summarize()的输出未分组。

帮助文档

查看summarize()的帮助,发现确实有一个参数.groups,原文如下:

根据summarize的参数提示,可以看到.groups参数控制结果的分组结构,有四个可选的取值:"drop_last"时去掉最后一个分组变量;"drop"时去掉所有分组水平,此时没有组属性;"keep"时保持与.data相同的分组结构; "rowwise"每一行自成一组。

当未指定.groups参数时,会根据结果的行数自动选择,如果输出结果大小为1,就自动设定为"drop_last"; 如果输出结果大小不一,就自动设定为"keep".

分析

简单来说,如果参数.groups没有设定,R就会输出这样一条message来提醒你对.groups进行设定。我们需要告诉R,输出结果要如何设定组,否则R就会自动更改输出结果的组属性,然后给你一条message告诉你我已经改了。这条message其实就是提醒我们group_by()下的summarize()输出其实还有具有“group”属性。不过这条message不影响结果的输出,主要起一个提醒的作用。

下面来做一个实验,取不同的.groups,更清楚地对比结果的异同。

(1)不指定.groups

> trans_loan_lab %>% group_by(label) %>% +summarise(rmean = mean(rInternal), +fmean = mean(frequency), +mmean = mean(monetary))`summarise()` ungrouping output (override with `.groups` argument)# A tibble: 8 x 4label rmean fmean mmean<chr> <dbl> <dbl> <dbl>1 一般保持客户 -269 102599 2 一般发展客户 -16.9 5.78 67715.3 一般价值客户 -15.0 10.1 64330.4 一般挽留客户 -85.4 2.48 22326.5 重要保持客户 -36.8 10.7 267037.6 重要发展客户 -18.0 6.12 139477.7 重要价值客户 -9.96 11.8 282704.8 重要挽留客户 -44.4 5.90 166351.

此时会输出message:summarise()ungrouping output (override with.groupsargument),告诉我们summarise()输出是没有组属性的。

(2).groups = "drop"

> trans_loan_lab %>% group_by(label) %>% +summarise(rmean = mean(rInternal), +fmean = mean(frequency), +mmean = mean(monetary), .groups= "drop")# A tibble: 8 x 4label rmean fmean mmean<chr> <dbl> <dbl> <dbl>1 一般保持客户 -269 102599 2 一般发展客户 -16.9 5.78 67715.3 一般价值客户 -15.0 10.1 64330.4 一般挽留客户 -85.4 2.48 22326.5 重要保持客户 -36.8 10.7 267037.6 重要发展客户 -18.0 6.12 139477.7 重要价值客户 -9.96 11.8 282704.8 重要挽留客户 -44.4 5.90 166351.

此时输出结果与(1)中相同,但是并没有输出message,因为我们已经指定在summarize后drop掉group属性。

(3).group = "keep"

> trans_loan_lab %>% group_by(label) %>% +summarise(rmean = mean(rInternal), +fmean = mean(frequency), +mmean = mean(monetary), .groups= "keep")# A tibble: 8 x 4# Groups: label [8]label rmean fmean mmean<chr> <dbl> <dbl> <dbl>1 一般保持客户 -269 102599 2 一般发展客户 -16.9 5.78 67715.3 一般价值客户 -15.0 10.1 64330.4 一般挽留客户 -85.4 2.48 22326.5 重要保持客户 -36.8 10.7 267037.6 重要发展客户 -18.0 6.12 139477.7 重要价值客户 -9.96 11.8 282704.8 重要挽留客户 -44.4 5.90 166351.

“keep”下保持与输入数据相同的分组结构,可以看到此时输出中就有组属性,第6行有# Groups: label [8]。还可以直接查看属性:

> trans_loan_lab %>% group_by(label) %>% +summarise(rmean = mean(rInternal), +fmean = mean(frequency), +mmean = mean(monetary), .groups= "keep") %>% str()tibble [8 x 4] (S3: grouped_df/tbl_df/tbl/data.frame)$ label: chr [1:8] "一般保持客户" "一般发展客户" "一般价值客户" "一般挽留客户" ...$ rmean: num [1:8] -26 -16.9 -15 -85.4 -36.8 ...$ fmean: num [1:8] 9 5.78 10.13 2.48 10.7 ...$ mmean: num [1:8] 102599 67715 64330 22326 267037 ...- attr(*, "groups")= tibble [8 x 2] (S3: tbl_df/tbl/data.frame)..$ label: chr [1:8] "一般保持客户" "一般发展客户" "一般价值客户" "一般挽留客户" .....$ .rows: list<int> [1:8] .. ..$ : int 1.. ..$ : int 2.. ..$ : int 3.. ..$ : int 4.. ..$ : int 5.. ..$ : int 6.. ..$ : int 7.. ..$ : int 8.. ..@ ptype: int(0) ..- attr(*, ".drop")= logi TRUE

取消message

如果不想设定.groups,可以取消message输出,设定

options(dplyr.summarise.inform = FALSE)

注意,这里不要写成summarize,不然这条设定不起作用。

感兴趣也可以参考

【1】Stackoverflow

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。