반응형
dplyr은 각각을 나열하지 않고 여러 변수를 요약 할 수 있습니까?
이 질문에 이미 답변이 있습니다.
dplyr은 놀랍도록 빠르지 만 뭔가 빠진 것이 있는지 궁금합니다. 여러 변수에 대해 요약 할 수 있습니까? 예를 들면 :
library(dplyr)
library(reshape2)
(df=dput(structure(list(sex = structure(c(1L, 1L, 2L, 2L), .Label = c("boy",
"girl"), class = "factor"), age = c(52L, 58L, 40L, 62L), bmi = c(25L,
23L, 30L, 26L), chol = c(187L, 220L, 190L, 204L)), .Names = c("sex",
"age", "bmi", "chol"), row.names = c(NA, -4L), class = "data.frame")))
sex age bmi chol
1 boy 52 25 187
2 boy 58 23 220
3 girl 40 30 190
4 girl 62 26 204
dg=group_by(df,sex)
이 작은 데이터 프레임으로 작성하기 쉽습니다.
summarise(dg,mean(age),mean(bmi),mean(chol))
그리고 나는 내가 원하는 것을 얻기 위해 녹아 내리고, 수단을 얻은 다음,
dm=melt(df, id.var='sex')
dmg=group_by(dm, sex, variable);
x=summarise(dmg, means=mean(value))
dcast(x, sex~variable)
그러나 20 개 이상의 변수와 매우 많은 수의 행이 있으면 어떨까요? 그룹화 된 데이터 프레임의 모든 변수를 사용할 수있는 data.table의 .SD와 유사한 것이 있습니까? 또는 그룹화 된 데이터 프레임에서 어떻게 든 lapply를 사용할 수 있습니까?
도움을 주셔서 감사합니다
data.table
관용구는 lapply(.SD, mean)
이다,
DT <- data.table(df)
DT[, lapply(.SD, mean), by = sex]
# sex age bmi chol
# 1: boy 55 24 203.5
# 2: girl 51 28 197.0
dplyr
같은 일 에 대한 관용구는 잘 모르겠지만 다음과 같이 할 수 있습니다.
dg <- group_by(df, sex)
# the names of the columns you want to summarize
cols <- names(dg)[-1]
# the dots component of your call to summarise
dots <- sapply(cols ,function(x) substitute(mean(x), list(x=as.name(x))))
do.call(summarise, c(list(.data=dg), dots))
# Source: local data frame [2 x 4]
# sex age bmi chol
# 1 boy 55 24 203.5
# 2 girl 51 28 197.0
주의점 github의의 문제가 있음을 # 178 efficienctly 구현하는 plyr
관용구 colwise
의를 dplyr
.
dplyr
이제 summarise_each
:
df %>%
group_by(sex) %>%
summarise_each(funs(mean))
반응형
'Development Tip' 카테고리의 다른 글
Groovy에는 2 개의 맵을 병합하는 방법이 있습니까? (0) | 2020.10.23 |
---|---|
matplotlib (동일한 단위 길이) : '동일한'종횡비 사용 z 축이 x 및 y-와 같지 않음 (0) | 2020.10.23 |
org.apache.http.HttpResponse에서 HTTP 코드 가져 오기 (0) | 2020.10.22 |
Visual Studio의 솔루션에서 * 모든 * Nuget 패키지를 제거하는 방법 (0) | 2020.10.22 |
PHP 변수에서 공백을 제거하려면 어떻게해야합니까? (0) | 2020.10.22 |