programing

dplyr 메시지 'summarise()' 출력을 'x'('.groups' 인수로 재정의함)로 다시 그룹화하는 것을 어떻게 해석합니까?

muds 2023. 7. 5. 21:02
반응형

dplyr 메시지 'summarise()' 출력을 'x'('.groups' 인수로 재정의함)로 다시 그룹화하는 것을 어떻게 해석합니까?

dplyr 개발 버전 0.8.99.9003으로 업데이트한 후 group_by 및 summary()를 실행할 때 새로운 메시지(포스트 제목 참조)가 뜨기 시작했습니다.

다음은 출력을 다시 생성하는 예입니다.

library(tidyverse)
library(hablar)
df <- read_csv("year, week, rat_house_females, rat_house_males, mouse_wild_females, mouse_wild_males 
               2018,10,1,1,1,1
               2018,10,1,1,1,1
               2018,11,2,2,2,2
               2018,11,2,2,2,2
               2019,10,3,3,3,3
               2019,10,3,3,3,3
               2019,11,4,4,4,4
               2019,11,4,4,4,4") %>% 
  convert(chr(year,week)) %>% 
  mutate(total_rodents = rowSums(select_if(., is.numeric))) %>% 
  convert(num(year,week)) %>% 
  group_by(year,week) %>% summarise(average = mean(total_rodents))

출력 티블이 올바르지만 다음 메시지가 나타납니다.

summarise()을 '별로('년'으로 표시).groups인수)

이것을 어떻게 해석해야 합니까?연도와 주를 모두 기준으로 그룹화했는데 왜 '연도'로만 그룹화가 보고됩니까?또한, 재정의한다는 것은 무엇을 의미하며 왜 제가 그렇게 하려고 합니까?

dplyr vignette 전체에 메시지가 나타나므로 문제를 나타내지 않는다고 생각합니다. https://cran.r-project.org/web/packages/dplyr/vignettes/programming.html

쌍으로 녹이는 방법과 같은 매우 최근의 SO 질문에만 나타났기 때문에 새로운 메시지라고 생각합니다.wilcox.dplyr을 사용하여 출력을 테스트합니까?R 재그룹화/재지정 메시지를 처리하지 않는 여러 열에 걸쳐 집계합니다.

감사해요!

이것은 결과적인 그룹 구조에 대한 친절한 경고 메시지일 뿐입니다. 출력이 정확합니다.기본적으로 다음 이전에 그룹화가 있는 경우summarise하의그룹변, 즉마으지에 합니다.group_by그룹화 변수가 하나만 있으면 그룹화 특성이 다음과 같이 나타나지 않습니다.summarise 10% 합니다.따라서 요약할 입력에 두 개의 변수가 있기 때문에 이 예제에서는 그룹화에 대한 속성이 하나로 줄어듭니다. 즉, 결과 데이터 프레임은 그룹화 속성으로 '연도'를 가집니다.

재현 가능한 예로 다음을 들 수 있습니다.

library(dplyr)
mtcars %>%
     group_by(am) %>% 
     summarise(mpg = sum(mpg))
#`summarise()` ungrouping output (override with `.groups` argument)
# A tibble: 2 x 2
#     am   mpg
#* <dbl> <dbl>
#1     0  326.
#2     1  317.

메시지는 그것이ungroup한 개의 를예들싱있을때글이가 때group_by" ▁the" 뒤에 해당 합니다.summarise

mtcars %>% 
   group_by(am, vs) %>% 
   summarise(mpg = sum(mpg))
#`summarise()` regrouping output by 'am' (override with `.groups` argument)
# A tibble: 4 x 3
# Groups:   am [2]
#     am    vs   mpg
#  <dbl> <dbl> <dbl>
#1     0     0  181.
#2     0     1  145.
#3     1     0  118.
#4     1     1  199.

여기서 마지막 그룹을 삭제하고 'am'으로 다시 그룹화합니다.

우리가 확인하면,?summarise, 어있.groups으로 기적으입니인 인수입니다."drop_last" 또 은 " 고리다옵션은들른그은들옵▁are션"입니다."drop","keep","rowwise"

.groups - 결과의 그룹화 구조입니다.

"drop_last": 그룹화의 마지막 수준을 삭제합니다.버전 1.0.0 이전에는 이 옵션이 유일하게 지원되었습니다.

"drop": 그룹화의 모든 수준이 삭제됩니다.

"keep": .data와 동일한 그룹 구조입니다.

"행 방향":각 행은 고유한 그룹입니다.

.groups가 지정되지 않은 경우 모든 결과가 크기가 1이면 "drop_last"가 되고 크기가 다를 경우 "keep"이 됩니다.또한 "dplyr" 옵션을 사용하지 않는 한 메시지가 해당 선택사항을 알려줍니다.summary.inform"이 FALSE로 설정되었습니다.

즉, 만약 우리가 바꾼다면..groupssummarise되지 않습니다.

mtcars %>% 
    group_by(am) %>%
    summarise(mpg = sum(mpg), .groups = 'drop')
# A tibble: 2 x 2
#     am   mpg
#* <dbl> <dbl>
#1     0  326.
#2     1  317.


mtcars %>%
   group_by(am, vs) %>%
   summarise(mpg = sum(mpg), .groups = 'drop')
# A tibble: 4 x 3
#     am    vs   mpg
#* <dbl> <dbl> <dbl>
#1     0     0  181.
#2     0     1  145.
#3     1     0  118.
#4     1     1  199.


mtcars %>% 
   group_by(am, vs) %>% 
   summarise(mpg = sum(mpg), .groups = 'drop') %>%
   str
#tibble [4 × 3] (S3: tbl_df/tbl/data.frame)
# $ am : num [1:4] 0 0 1 1
# $ vs : num [1:4] 0 1 0 1
# $ mpg: num [1:4] 181 145 118 199

이 가 OP를 할 수 있습니다.mutate또는 그룹화가 없고 예기치 않은 출력이 발생한다고 가정할 수 있습니다. 표시를 .

: 파일: 파일.groups은 지은금입니다.experimental수명 주기에 있어요.그 될 수 .

한 그룹화 변수를 로 변환해야 하는지 필요하지 에, 는 동한그변필필지변요에추한환가있수다같옵니다습선에서 다른 할 수 있었습니다..groups.

받아들여진 대답을 바꿔 말하면, 그것은 단지 친근하고 혼란스러운 경고일 뿐입니다.

summarise()을 '로 그룹화했습니다.

판독해야 합니다. 출력이 정상이고 모든 그룹화 열을 속성으로 포함하며 그룹화 키만 제한될 수 있습니다.

의 예mtcars타고cyl, ammean(mpg)

mtcars %>% group_by(cyl, am) %>% summarise(avg_mpg = mean(mpg))
`summarise()` has grouped output by 'cyl'. You can override using the `.groups` argument.
# A tibble: 6 x 3
# Groups:   cyl [3]
    cyl    am avg_mpg
  <dbl> <dbl>   <dbl>
1     4     0    22.9
2     4     1    28.1
3     6     0    19.1
4     6     1    20.6
5     8     0    15.0
6     8     1    15.4

키 중 첫 인 " 에서그키중화첫번키기만째다사본니표출보됩시경는다가고었용존되여력하값을 ..groups = "drop_last"을 참조하십시오.# Groups: cyl [3].

에도 불구하고, 그다럼에도완전합니모두속성은.cyl그리고.am정의됩니다.

에서는 사용 하며, 은 다음과 같습니다.group_keys()

mtcars %>% group_by(cyl, am) %>% summarise(avg_mpg = mean(mpg)) %>% group_keys() 
`summarise()` has grouped output by 'cyl'. You can override using the `.groups` argument.
# A tibble: 3 x 1
    cyl
  <dbl>
1     4
2     6
3     8

mtcars %>% group_by(cyl, am) %>% summarise(avg_mpg = mean(mpg), .groups = "keep") %>% group_keys() 
# A tibble: 6 x 2
    cyl    am
  <dbl> <dbl>
1     4     0
2     4     1
3     6     0
4     6     1
5     8     0
6     8     1

mtcars %>% group_by(cyl, am) %>% summarise(avg_mpg = mean(mpg), .groups = "drop") %>% group_keys() 
# A tibble: 1 x 0

표시되는 유일한 결과는 계단식 요약을 사용하는 경우입니다. 아래 예제에서는 그룹 키가 삭제될 때 요약 행이 하나만 생성됩니다.

mtcars %>% group_by(cyl, am) %>% summarise(avg_mpg = mean(mpg), .groups = "drop") %>% summarise(min_avg_mpg = min(avg_mpg))
# A tibble: 1 x 1
  min_avg_mpg
        <dbl>
1   15.0

그러나 그룹화 특성을 모두 사용할 수 있으므로 다음을 사용하여 필요에 따라 그룹 키를 재설정하는 은 문제가 되지 않습니다.group_by(cyl, am)다음 요약 전에.

답은 ?summary에 설명되어 있습니다. ".groups를 지정하지 않으면 결과 행 수에 따라 선택됩니다.모든 결과에 하나의 행이 있으면 "drop_last"가 표시됩니다.행 수가 다를 경우 "keep"이 표시됩니다.

기본적으로 이러한 메시지는 .group= 인수로 사용할 옵션이 두 개 이상 있을 때 표시됩니다.위 조건에 따라 통계 계산에 "drop_last" 또는 "keep" 옵션이 하나 이상의 행이 있는 결과에 대해 각각 하나씩 사용되었음을 알리는 메시지가 표시됩니다.파이프라인에서 두 개 이상의 그룹화 기준을 적용했지만 그룹화에 관계없이 모든 값에 걸쳐 데이터를 요약해야 한다고 가정해 보겠습니다. 이 작업은 .group = 'drop'을 설정하여 수행할 수 있습니다.불행히도, 이것은 이론적으로만 가능합니다. 왜냐하면, @akrun의 예에서 볼 수 있듯이, 통계 값은 .group =에서 어떤 옵션이 설정되었든 상관없이 동일하게 유지되기 때문입니다. (이러한 다양한 옵션을 데이터 세트 중 하나에 적용하여 동일한 결과와 동일한 데이터 프레임 구조('데이터 세트 구조는 .group= 인수에 의해 제어됨...)그러나 인수 .group을 지정하면 메시지가 출력되지 않습니다.

요약을 사용할 때 그룹화 기준을 사용하지 않을 경우 출력 통계량이 모든 행에 걸쳐 계산되므로 '결과에 1개의 행이 있습니다'라는 것입니다.하나 이상의 그룹화 기준을 사용하면 출력 통계량이 각 그룹 내에서 계산되므로 데이터 프레임의 그룹 수에 따라 '행 수가 달라집니다'.

이 사용을 해결하기 위해summarise(avg_mpg = mean(mpg), .groups = "drop")dplyr은 실제로 결과 테이블을 그룹화된 것으로 해석하므로 경고를 표시합니다.

은 이다음결수있다니습과의 일 수 .summarise_all()summarise(across(everything()...

> tibble(gr1=c(1,1,2), gr2=c(1,1,2), val=1:3) %>% 
    group_by(gr1, gr2) %>% 
    summarise(across(everything(), mean))

#`summarise()` has grouped output by 'gr1'. 
# You can override using the #`.groups` argument.

# A tibble: 2 x 3
# Groups:   gr1 [2]
    gr1   gr2   val
  <dbl> <dbl> <dbl>
1     1     1   1.5
2     2     2   3


> tibble(gr1=c(1,1,2), gr2=c(1,1,2), val=1:3) %>% 
+     group_by(gr1, gr2) %>% 
+     summarise_all(mean)
# No warnings here

# A tibble: 2 x 3
# Groups:   gr1 [2]
    gr1   gr2   val
  <dbl> <dbl> <dbl>
1     1     1   1.5
2     2     2   3

그래서 경고의 의미는 다음과 같습니다.everything()에서 일부열은열). »

언급URL : https://stackoverflow.com/questions/62140483/how-to-interpret-dplyr-message-summarise-regrouping-output-by-x-override

반응형