问题描述

数据框中至少包含两列,一列表示分组,其他列为数字,其中有一列的列名为“sum”。对该数据框基于某列进行分组求和时,提示:

Error in `summarise()`:
! Problem while computing `..1 = across(col_first:col_last, sum)`.

代码及结果

正常情况下,分组求和没有问题:

library(dplyr)
df <- data.frame(
  grp = rep(c("a", "b"), 2), 
  col_first = c(1:4), 
  col_last = c(5:8)
)
df %>% 
  group_by(grp) %>% 
  summarise(across(col_first:col_last, sum)) %>% 
  ungroup()
# 结果为:
# # A tibble: 2 × 3
# grp   col_first col_last
# <chr>     <int>    <int>
#   1 a             4       12
# 2 b             6       14

但是当数据框中有一列名为“sum”的数据时:

df <- data.frame(
  grp = rep(c("a", "b"), 2), 
  col_first = c(1:4), 
  sum = c(1:4), 
  col_last = c(5:8)
)
df %>% 
  group_by(grp) %>% 
  summarise(across(col_first:col_last, sum)) %>% 
  ungroup()
# 提示错误:
# Error in `summarise()`:
#   ! Problem while computing `..1 = across(col_first:col_last, sum)`.
# ℹ The error occurred in group 0: character(0).
# Caused by error:
#   ! attempt to select less than one element in integerOneIndex
# Run `rlang::last_error()` to see where the error occurred.

根据提示查找错误原因:

rlang::last_error()
# 结果为:
# <error/rlang_error>
#   Error in `summarise()`:
#   ! Problem while computing `..1 = across(col_first:col_last, sum)`.
# ℹ The error occurred in group 0: character(0).
# Caused by error:
#   ! attempt to select less than one element in integerOneIndex
# ---
#   Backtrace:
#   1. ... %>% ungroup()
# 10. `<fn>`()
# Run `rlang::last_trace()` to see the full context.

潜在方案及问题

当然,可以通过逐项求和来解决,但是实际情况中,我的数据框包括很多列,逐项书写并不实际:

df %>% 
  group_by(grp) %>% 
  summarise(
    col_first = sum(col_first), 
    sum = sum(sum), 
    col_last = sum(col_last)
  ) %>% 
  ungroup()
# 结果为:
# # A tibble: 2 × 4
# grp   col_first   sum col_last
# <chr>     <int> <int>    <int>
#   1 a             4     4       12
# 2 b             6     6       14

也可以通过其他包来解决,但是这样就要多加载个包:

library(purrrlyr)
df %>% 
  slice_rows("grp") %>% 
  dmap(sum)

运行你给出的示例代码一切正常,无法重现你说的问题。要么sessioninfo::session_info()给出一下你采用的软件包的版本?

    虽然我不知道为啥会这样产生冲突,但我想到一个绕行的办法,就是给sum()函数套一个匿名函数的壳:function(x){sum(x)}

    library(dplyr)
    #> 
    #> 载入程辑包:'dplyr'
    #> The following objects are masked from 'package:stats':
    #> 
    #>     filter, lag
    #> The following objects are masked from 'package:base':
    #> 
    #>     intersect, setdiff, setequal, union
    df <- data.frame(
      grp = rep(c("a", "b"), 2), 
      col_first = c(1:4), 
      sum = c(1:4), 
      col_last = c(5:8)
    )
    df %>% 
      group_by(grp) %>% 
      summarise(across(col_first:col_last, function(x){sum(x)})) %>% 
      ungroup()
    #> # A tibble: 2 x 4
    #>   grp   col_first   sum col_last
    #>   <chr>     <int> <int>    <int>
    #> 1 a             4     4       12
    #> 2 b             6     6       14
    xfun::session_info()
    #> R version 4.1.3 (2022-03-10)
    #> Platform: x86_64-w64-mingw32/x64 (64-bit)
    #> Running under: Windows 10 x64 (build 19044)
    #> 
    #> Locale:
    #>   LC_COLLATE=Chinese (Simplified)_China.936 
    #>   LC_CTYPE=Chinese (Simplified)_China.936   
    #>   LC_MONETARY=Chinese (Simplified)_China.936
    #>   LC_NUMERIC=C                              
    #>   LC_TIME=Chinese (Simplified)_China.936    
    #> 
    #> Package version:
    #>   base64enc_0.1.3   bslib_0.3.1       callr_3.7.0       cli_3.2.0        
    #>   clipr_0.8.0       compiler_4.1.3    crayon_1.5.1      digest_0.6.29    
    #>   dplyr_1.0.8       ellipsis_0.3.2    evaluate_0.15     fansi_1.0.3      
    #>   fastmap_1.1.0     fs_1.5.2          generics_0.1.2    glue_1.6.2       
    #>   graphics_4.1.3    grDevices_4.1.3   highr_0.9         htmltools_0.5.2  
    #>   jquerylib_0.1.4   jsonlite_1.8.0    knitr_1.38        lifecycle_1.0.1  
    #>   magrittr_2.0.3    methods_4.1.3     pillar_1.7.0      pkgconfig_2.0.3  
    #>   processx_3.5.2    ps_1.6.0          purrr_0.3.4       R.cache_0.15.0   
    #>   R.methodsS3_1.8.1 R.oo_1.24.0       R.utils_2.11.0    R6_2.5.1         
    #>   rappdirs_0.3.3    rematch2_2.1.2    reprex_2.0.1      rlang_1.0.2      
    #>   rmarkdown_2.13    rprojroot_2.0.3   rstudioapi_0.13   sass_0.4.1       
    #>   stats_4.1.3       stringi_1.7.6     stringr_1.4.0     styler_1.7.0     
    #>   tibble_3.1.6      tidyselect_1.1.2  tinytex_0.38      tools_4.1.3      
    #>   utf8_1.2.2        utils_4.1.3       vctrs_0.4.1       withr_2.5.0      
    #>   xfun_0.30         yaml_2.3.5

    <sup>Created on 2023-03-20 by the reprex package (v2.0.1)</sup>

    fenguoerbian 谢谢呀,我的session info如下:

    > sessioninfo::session_info()
    ─ Session info ───────────────────────────────────────────────────────────────────────
     setting  value
     version  R version 4.1.2 (2021-11-01)
     os       macOS Monterey 12.3.1
     system   x86_64, darwin17.0
     ui       RStudio
     language (EN)
     collate  en_US.UTF-8
     ctype    en_US.UTF-8
     tz       Asia/Tokyo
     date     2023-03-20
     rstudio  2022.12.0+353 Elsbeth Geranium (desktop)
     pandoc   NA
    
    ─ Packages ───────────────────────────────────────────────────────────────────────────
     package      * version    date (UTC) lib source
     assertthat     0.2.1      2019-03-21 [1] CRAN (R 4.1.0)
     bitops         1.0-7      2021-04-24 [1] CRAN (R 4.1.0)
     caTools        1.18.2     2021-03-28 [1] CRAN (R 4.1.0)
     class          7.3-19     2021-05-03 [1] CRAN (R 4.1.2)
     cli            3.5.0      2022-12-20 [1] CRAN (R 4.1.2)
     cluster        2.1.2      2021-04-17 [1] CRAN (R 4.1.2)
     codetools      0.2-18     2020-11-04 [1] CRAN (R 4.1.2)
     colorspace     2.0-3      2022-02-21 [1] CRAN (R 4.1.2)
     crayon         1.5.2      2022-09-29 [1] CRAN (R 4.1.2)
     crosstalk      1.2.0      2021-11-04 [1] CRAN (R 4.1.0)
     data.table     1.14.6     2022-11-16 [1] CRAN (R 4.1.2)
     DBI            1.1.3      2022-06-18 [1] CRAN (R 4.1.2)
     digest         0.6.31     2022-12-11 [1] CRAN (R 4.1.2)
     dplyr        * 1.0.10     2022-09-01 [1] CRAN (R 4.1.2)
     e1071          1.7-12     2022-10-24 [1] CRAN (R 4.1.2)
     ellipsis       0.3.2      2021-04-29 [1] CRAN (R 4.1.0)
     fansi          1.0.3      2022-03-24 [1] CRAN (R 4.1.2)
     farver         2.1.1      2022-07-06 [1] CRAN (R 4.1.2)
     fastmap        1.1.0      2021-01-25 [1] CRAN (R 4.1.0)
     forcats      * 0.5.2      2022-08-19 [1] CRAN (R 4.1.2)
     foreach        1.5.2      2022-02-02 [1] CRAN (R 4.1.2)
     future         1.29.0     2022-11-06 [1] CRAN (R 4.1.2)
     future.apply   1.8.1      2021-08-10 [1] CRAN (R 4.1.0)
     generics       0.1.3      2022-07-05 [1] CRAN (R 4.1.2)
     ggplot2      * 3.4.0      2022-11-04 [1] CRAN (R 4.1.2)
     glmnet         4.1-4      2022-04-15 [1] CRAN (R 4.1.2)
     globals        0.16.2     2022-11-21 [1] CRAN (R 4.1.2)
     glue           1.6.2      2022-02-24 [1] CRAN (R 4.1.2)
     gtable         0.3.1      2022-09-01 [1] CRAN (R 4.1.2)
     htmltools      0.5.4      2022-12-07 [1] CRAN (R 4.1.2)
     htmlwidgets    1.5.4      2021-09-08 [1] CRAN (R 4.1.0)
     httr           1.4.4      2022-08-17 [1] CRAN (R 4.1.2)
     ipred          0.9-12     2021-09-15 [1] CRAN (R 4.1.0)
     iterators      1.0.14     2022-02-05 [1] CRAN (R 4.1.2)
     janeaustenr    0.1.5      2017-06-10 [1] CRAN (R 4.1.0)
     jsonlite       1.8.4      2022-12-06 [1] CRAN (R 4.1.2)
     labeling       0.4.2      2020-10-20 [1] CRAN (R 4.1.0)
     lattice      * 0.20-45    2021-09-22 [1] CRAN (R 4.1.2)
     lava           1.6.10     2021-09-02 [1] CRAN (R 4.1.0)
     lazyeval       0.2.2      2019-03-15 [1] CRAN (R 4.1.0)
     lifecycle      1.0.3      2022-10-07 [1] CRAN (R 4.1.2)
     listenv        0.8.0      2019-12-05 [1] CRAN (R 4.1.0)
     magrittr       2.0.3      2022-03-30 [1] CRAN (R 4.1.2)
     MASS           7.3-54     2021-05-03 [1] CRAN (R 4.1.2)
     Matrix         1.5-1      2022-09-13 [1] CRAN (R 4.1.2)
     mgcv           1.8-38     2021-10-06 [1] CRAN (R 4.1.2)
     modeltools     0.2-23     2020-03-05 [1] CRAN (R 4.1.0)
     munsell        0.5.0      2018-06-12 [1] CRAN (R 4.1.0)
     nlme           3.1-153    2021-09-07 [1] CRAN (R 4.1.2)
     NLP            0.2-1      2020-10-14 [1] CRAN (R 4.1.0)
     nnet           7.3-16     2021-05-03 [1] CRAN (R 4.1.2)
     parallelly     1.32.1     2022-07-21 [1] CRAN (R 4.1.2)
     patchwork    * 1.1.1      2020-12-17 [1] CRAN (R 4.1.0)
     permute      * 0.9-7      2022-01-27 [1] CRAN (R 4.1.2)
     pillar         1.8.1      2022-08-19 [1] CRAN (R 4.1.2)
     pkgconfig      2.0.3      2019-09-22 [1] CRAN (R 4.1.0)
     plotly       * 4.10.0     2021-10-09 [1] CRAN (R 4.1.0)
     plyr           1.8.8      2022-11-11 [1] CRAN (R 4.1.2)
     prodlim        2019.11.13 2019-11-17 [1] CRAN (R 4.1.0)
     proxy          0.4-27     2022-06-09 [1] CRAN (R 4.1.2)
     purrr          1.0.1      2023-01-10 [1] CRAN (R 4.1.2)
     purrrlyr     * 0.0.8      2022-03-29 [1] CRAN (R 4.1.2)
     R6             2.5.1      2021-08-19 [1] CRAN (R 4.1.0)
     randomForest   4.7-1.1    2022-05-23 [1] CRAN (R 4.1.2)
     Rcpp           1.0.9      2022-07-08 [1] CRAN (R 4.1.2)
     reshape2       1.4.4      2020-04-09 [1] CRAN (R 4.1.0)
     rlang          1.0.6      2022-09-24 [1] CRAN (R 4.1.2)
     rpart          4.1-15     2019-04-12 [1] CRAN (R 4.1.2)
     rstudioapi     0.13       2020-11-12 [1] CRAN (R 4.1.0)
     RTextTools   * 1.4.3      2020-04-26 [1] CRAN (R 4.1.0)
     scales         1.2.1      2022-08-20 [1] CRAN (R 4.1.2)
     sessioninfo    1.2.2      2021-12-06 [1] CRAN (R 4.1.0)
     shape          1.4.6      2021-05-19 [1] CRAN (R 4.1.0)
     slam           0.1-50     2022-01-08 [1] CRAN (R 4.1.2)
     SnowballC      0.7.0      2020-04-01 [1] CRAN (R 4.1.0)
     SparseM      * 1.81       2021-02-18 [1] CRAN (R 4.1.0)
     stringi        1.7.8      2022-07-11 [1] CRAN (R 4.1.2)
     stringr        1.5.0      2022-12-02 [1] CRAN (R 4.1.2)
     survival       3.2-13     2021-08-24 [1] CRAN (R 4.1.2)
     tau            0.0-24     2021-07-21 [1] CRAN (R 4.1.0)
     tibble         3.1.8      2022-07-22 [1] CRAN (R 4.1.2)
     tidyr        * 1.2.1      2022-09-08 [1] CRAN (R 4.1.2)
     tidyselect     1.2.0      2022-10-10 [1] CRAN (R 4.1.2)
     tidytext     * 0.3.2      2021-09-30 [1] CRAN (R 4.1.0)
     tm             0.7-8      2020-11-18 [1] CRAN (R 4.1.0)
     tokenizers     0.2.1      2018-03-29 [1] CRAN (R 4.1.0)
     topicmodels  * 0.2-12     2021-01-29 [1] CRAN (R 4.1.0)
     tree           1.0-41     2021-08-17 [1] CRAN (R 4.1.0)
     utf8           1.2.2      2021-07-24 [1] CRAN (R 4.1.0)
     vctrs          0.5.1      2022-11-16 [1] CRAN (R 4.1.2)
     vegan        * 2.5-7      2020-11-28 [1] CRAN (R 4.1.0)
     viridisLite    0.4.1      2022-08-22 [1] CRAN (R 4.1.2)
     withr          2.5.0      2022-03-03 [1] CRAN (R 4.1.2)
     xml2         * 1.3.3      2021-11-30 [1] CRAN (R 4.1.0)
     yaml           2.3.6      2022-10-18 [1] CRAN (R 4.1.2)
    
     [1] /Library/Frameworks/R.framework/Versions/4.1/Resources/library

    谢谢大家,正如前文各位所说,给sum()套个壳子:

    df %>% 
      group_by(grp) %>% 
      summarise(across(col_first:col_last, function(x){sum(x)})) %>% 
      ungroup()

    或者这样也行:

    df %>% 
      group_by(grp) %>% 
      summarise(across(col_first:col_last, ~sum(.))) %>% 
      ungroup()