2017-12-06 8 views
0

R에서 dplyr을 사용하여 그룹화 된 평균 및 sds를 인쇄하는 방법이 있습니까 (예 : 많은 무작위 대조 시험 보고서에서 위약 및 약물 군에 대한 기본 인구 통계가보고되는 경우) . 순간 나는이 : 수단 아래 SDS를 배치dply를 사용하는 평균 및 sds 표

group_summary<- df %>% 
    group_by(group) %>% 
    summarise_at(vars(age, iq), c(mean, sd), na.rm=TRUE) 

t(group_summary) 

:

      [,1]  [,2]  [,3]   
group       "drug1"  "drug2"  "placebo" 
age (x, ...) ...    "22.7(3.8)" "25.1(3.9)" "23.5(4.6)" 
weight (x, ...) ...   "56.0(16.0)" NA   "64.7(15.4)" 

감사 :

       [,1]  [,2]  [,3]   
group       "drug1"  "drug2"  "placebo" 
age (x, ...) ...    "22.72436" "25.06164" "23.54394" 
weight (x, ...) ...   "57.97143" NA   "64.66667" 
age (x, na.rm = FALSE) ... "3.793276" "3.930634" "4.623405" 
weight (x, na.rm = FALSE) ... "16.03617" NA   "15.44099" 

때 이상적으로 내가 좋아하는 것이 무엇의 라인을 따라 뭔가 더있다 어떤 조언을해도 가능하다면 딱딱한 방법이 이상적 일 것이다.

답변

0

@ Pete의 답을 바탕으로 만들어야합니다. 이 여러 변수에 대한 싶지 A, B, C 및 D를 말한다면, 그렇게하지

library(tidyverse) 

df%>% 
    group_by(grouping.variable)%>% 
    summarise_at(vars(a,b,c,d), funs(paste0(format(round(mean(., na.rm = T), y), 
               nsmall = y),"(",format(round(sd(., na.rm = T), y), nsmall = y) ,")")))%>% 
gather(Variable, Value, -grouping.variable)%>% 
spread(grouping.variable, Value) 

.. 이렇게 아주 방법 t() 작품처럼. tidyr 패키지의 gatherspread을 사용하고 싶습니다.

내가 원하는대로 제공되기를 바랍니다.

0

내가 이것을 사용한다 :

df1 <- df %>% 
    group_by(grouping.variable) %>% 
    summarise(#x = variable, y = number of decimal places 
    mean.sd.x = paste0(format(round(mean(x), y), 
     nsmall = y),"(",format(round(sd(x), y), nsmall = y) ,")")) 
+0

단일 변수에 대해이 작업을 잘 해줘서 고맙습니다. 예를 들어이를 실행할 수있는 효율적인 방법이 있습니까? 20 변수 (나이, 높이, iq 등) – RobMcC

+0

방금 ​​마지막 줄을 수동으로 반복합니다. mead.sd.age = ...., mean.sd.weight = ..... 저에게 더 효율적인 방법이 있습니다. – Pete