함수 - summarise in r




`dplyr` 다음에`plyr`을로드 할 때 왜 group_by로 작업하지 않습니까? (2)

당신의 코드는 "plyr"과 "dplyr"을 적재 한 순서 때문에 plyr::summarise 대신에 dplyr::summarise 호출합니다.

데모:

library(dplyr) ## I'm guessing this is the order you loaded
library(plyr)
dfx %>% group_by(group, sex) %>% 
  summarise(mean = round(mean(age), 2), sd = round(sd(age), 2))
#    mean   sd
# 1 36.88 9.76
dfx %>% group_by(group, sex) %>% 
  dplyr::summarise(mean = round(mean(age), 2), sd = round(sd(age), 2))
# Source: local data frame [6 x 4]
# Groups: group
# 
#   group sex  mean    sd
# 1     A   F 32.17  6.30
# 2     A   M 30.98  7.37
# 3     B   F 38.20  7.67
# 4     B   M 33.12 12.24
# 5     C   F 43.91 10.31
# 6     C   M 47.53  8.25

참고 : 이 질문의 제목은 plyr 함수가 plyr 함수를 마스크 할 때 문제에 대한 표준 질문으로 편집되었습니다. 나머지 질문은 변경되지 않습니다.

다음 데이터가 있다고 가정합니다.

dfx <- data.frame(
  group = c(rep('A', 8), rep('B', 15), rep('C', 6)),
  sex = sample(c("M", "F"), size = 29, replace = TRUE),
  age = runif(n = 29, min = 18, max = 54)
)

좋은 오래된 plyr 사용하면 다음 코드를 사용하여 데이터를 요약하는 작은 테이블을 만들 수 있습니다.

require(plyr)
ddply(dfx, .(group, sex), summarize,
      mean = round(mean(age), 2),
      sd = round(sd(age), 2))

결과는 다음과 같습니다.

  group sex  mean    sd
1     A   F 49.68  5.68
2     A   M 32.21  6.27
3     B   F 31.87  9.80
4     B   M 37.54  9.73
5     C   F 40.61 15.21
6     C   M 36.33 11.33

내 코드를 dplyr%>% 연산자로 이동하려고합니다. 내 코드는 DF를 사용하여 그룹 및 섹스별로 그룹화 한 다음 요약합니다. 그건:

dfx %>% group_by(group, sex) %>% 
  summarise(mean = round(mean(age), 2), sd = round(sd(age), 2))

하지만 내 결과는 다음과 같습니다.

  mean   sd
1 35.56 9.92

내가 뭘 잘못하고 있죠?


여기서 문제는 dplyr을 먼저로드 한 다음 plyr을로드한다는 summarise 입니다. 따라서 plyr의 함수 summarise 은 dplyr의 함수 summarise 을 마스킹하는 summarise 입니다. 그런 일이 생기면 다음과 같은 경고 메시지가 나타납니다.

require(plyr)
    Loading required package: plyr
------------------------------------------------------------------------------------------
You have loaded plyr after dplyr - this is likely to cause problems.
If you need functions from both plyr and dplyr, please load plyr first, then dplyr:
library(plyr); library(dplyr)
------------------------------------------------------------------------------------------

Attaching package: ‘plyr’

The following objects are masked from ‘package:dplyr’:

    arrange, desc, failwith, id, mutate, summarise, summarize

따라서 코드가 작동하려면 plyr detach(package:plyr) 하거나 R을 다시 시작하고 plyr을 먼저로드 한 다음 dplyr (또는 dplyr 만로드)을로드하십시오.

library(dplyr)
dfx %>% group_by(group, sex) %>% 
  summarise(mean = round(mean(age), 2), sd = round(sd(age), 2))
Source: local data frame [6 x 4]
Groups: group

  group sex  mean    sd
1     A   F 41.51  8.24
2     A   M 32.23 11.85
3     B   F 38.79 11.93
4     B   M 31.00  7.92
5     C   F 24.97  7.46
6     C   M 36.17  9.11

또는 코드에서 dplyr의 요약을 명시 적으로 호출 할 수 있으므로 패키지를로드하는 방법에 관계없이 올바른 함수가 호출됩니다.

dfx %>% group_by(group, sex) %>% 
  dplyr::summarise(mean = round(mean(age), 2), sd = round(sd(age), 2))




r-faq