首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dplyr group_by %>% summarize_if()中的错误

dplyr group_by %>% summarize_if()中的错误
EN

Stack Overflow用户
提问于 2022-02-05 21:35:09
回答 2查看 423关注 0票数 1

我正在处理一个相当小的数据集,试图按平均值汇总列,同时按第一列进行分组。目前,我有一个如下所示的df (LitterMean):

代码语言:javascript
复制
      date3 TotalBorn LiveBorn StillBorn Mummies
1   7/6        12       12         0       0
2   7/6        20       15         2       3
3  6/29        14       14         0       0
4   7/6        11       10         1       0
5   7/6        16       15         1       0
6   7/6        11       11         0       0

我试着跑

代码语言:javascript
复制
LitterMean %>%
  group_by(date3) %>%
  summarize_if(LitterMean, is.numeric, mean, na.rm=TRUE)

回传

代码语言:javascript
复制
Error: `.predicate` must have length 1, not 5.
Run `rlang::last_error()` to see where the error occurred.

所以我运行rlang::last_error()并接收

代码语言:javascript
复制
<error/rlang_error>
`.predicate` must have length 1, not 5.
Backtrace:
  1. `%>%`(...)
  2. dplyr::summarize_if(., LitterMean, is.numeric, mean, na.rm = TRUE)
  3. dplyr:::manip_if(...)
  4. dplyr:::tbl_if_syms(.tbl, .predicate, .env, .include_group_vars = .include_group_vars)
  8. dplyr:::tbl_if_vars(.tbl, .p, .env, ..., .include_group_vars = .include_group_vars)
  9. dplyr:::bad_args(".predicate", "must have length 1, not {length(.p)}.")
 10. dplyr:::glubort(fmt_args(args), ..., .envir = .envir)
Run `rlang::last_trace()` to see the full context.

以下显示我确实有NA文章。

代码语言:javascript
复制
sum(is.na(LitterMean))
[1] 5

是否有人知道我在代码中遗漏了什么可以防止上述错误的东西?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-05 21:43:02

您只需要正确调用summarize_if,如下所示:

代码语言:javascript
复制
LitterMean %>%
  group_by(date3) %>%
  summarize_if(is.numeric, mean, na.rm=TRUE)

预期结果:

代码语言:javascript
复制
> LitterMean %>%
+   group_by(date3) %>%
+   summarize_if(is.numeric, mean, na.rm=TRUE)
# A tibble: 2 × 5
  date3 TotalBorn LiveBorn StillBorn Mummies
  <chr>     <dbl>    <dbl>     <dbl>   <dbl>
1 6/29         14     14         0       0  
2 7/6          14     12.6       0.8     0.6
票数 0
EN

Stack Overflow用户

发布于 2022-02-05 21:45:13

你应该使用across

作用域动词(_if,_at,_all)已被现有动词中的across()取代。详见vignette("colwise")。

https://dplyr.tidyverse.org/reference/summarise_all.html

代码语言:javascript
复制
library(dplyr)
df %>%
  group_by(date3) %>%
  summarise(across(where(is.numeric), mean))
代码语言:javascript
复制
  date3 TotalBorn LiveBorn StillBorn Mummies
  <chr>     <dbl>    <dbl>     <dbl>   <dbl>
1 6/29         14     14         0       0  
2 7/6          14     12.6       0.8     0.6
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71002337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档