저는 그룹화 된 데이터 세트에서 작업 중이며 4 개의 요약 통계를 카운트, 평균, ci 하한, ci 상한의 4 개의 새 열로 추가하고 싶습니다.
평균, ci 하한, ci 상한을 다음과 같이 요약했습니다.
library(Hmisc)
library(dplyr)
# summarize count, mean, confidence intervals and make four new columns;
mtcars %>% group_by(vs, am) %>%
do(
as.data.frame(as.list(smean.cl.normal(.$mpg)))
)
# vs am Mean Lower Upper
# <dbl> <dbl> <dbl> <dbl> <dbl>
# 1 0 0 15.05000 13.28723 16.81277
# 2 0 1 19.75000 15.54295 23.95705
# 3 1 0 20.74286 18.45750 23.02822
# 4 1 1 28.37143 23.97129 32.77157
그러나 개수를 추가하면 새 열이 목록의 2 개 열이됩니다.
df <- mtcars %>% group_by(vs, am) %>%
do(
n = length(.$mpg),
stats = smean.cl.normal(.$mpg)
)
# # A tibble: 4 × 4
# vs am n stats
# * <dbl> <dbl> <list> <list>
# 1 0 0 <int [1]> <dbl [3]>
# 2 0 1 <int [1]> <dbl [3]>
# 3 1 0 <int [1]> <dbl [3]>
# 4 1 1 <int [1]> <dbl [3]>
내 원하는 출력은 다음과 같습니다.
# vs am n Mean Lower Upper
# <dbl> <dbl> <int> <dbl> <dbl> <dbl>
# 1 0 0 12 15.05000 13.28723 16.81277
# 2 0 1 6 19.75000 15.54295 23.95705
# 3 1 0 7 20.74286 18.45750 23.02822
# 4 1 1 7 28.37143 23.97129 32.77157
이것을 어떻게 편리하게 달성해야합니까?
미리 감사드립니다.
나는 또한 시도했다 :
mtcars %>% group_by(vs, am) %>%
do(
as.data.frame(as.list(c(length(.$mpg), smean.cl.normal(.$mpg))))
)
# Source: local data frame [4 x 8]
# Groups: vs, am [4]
#
# vs am X12 Mean Lower Upper X6 X7
# <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
# 1 0 0 12 15.05000 13.28723 16.81277 NA NA
# 2 0 1 NA 19.75000 15.54295 23.95705 6 NA
# 3 1 0 NA 20.74286 18.45750 23.02822 NA 7
# 4 1 1 NA 28.37143 23.97129 32.77157 NA 7
이것은 이상한 결과를 제공합니다.
당신은하지 않고이 작업을 수행 할 수있는 do
여러 사용하여 tidyverse
패키지를, 즉 tidyr
, dplyr
, purrr
와 broom
.
그 이유 do
는 결국purrr
그렇습니다:
smean.cl.normal
3 단계에서 적절한 형식 을 얻으려면 몇 가지 마무리 작업을 수행해야합니다. 내 접근 방식은 출력을 깔끔한 데이터 프레임으로 변환 broom::tidy
한 다음 tidyr::spread
행을 열로 변환하는 것이 었습니다 . 각 대 / 암 그룹에 대한 적절한 깔끔한 형태입니다. 이 접근 방식은 개선 될 수 있으며 이러한 제안이 의견에 게시되기를 바랍니다.
library(Hmisc)
library(tidyverse)
mtcars %>%
group_by(vs, am) %>%
nest(mpg) %>%
mutate(stats = map(data, ~spread(tidy(smean.cl.normal(.x$mpg)), names, x)),
n = map(data, nrow)) %>%
unnest(stats, n) %>%
select(-data)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다