2016-08-08 5 views
3

필자는 비교적 큰 데이터 세트를 가지고 있으며, 요인 조합에 대한 평균 및 표준 편차 표를 인쇄하려고합니다. 나는 다음과 같은 형식으로 그것들을 가지고 싶습니다.평균 테이블 (SD)

  A   B 
test1 2.0 (1.0) 5.0 (2.0) 
test2 6.3 (3.1) 2.1 (0.7) 

쉬운 방법이 있습니까?

나는 tables::tabular 기능 (최소한의 예) 사용 얻을 수있는 가장 가까운 :

# Example data 
df = data.frame(
    group=c('A', 'A', 'A', 'B', 'B', 'B'), 
    value=c(1,2,3,6,8,9)) 

# Print table  
library(tables) 
tabular(value ~ group * (mean + sd), df) 

...이 출력 :

 group    
     A  B   
     mean sd mean sd 
value 2  1 7.667 1.52 

하지만 깔끔한 방식을 생각하지 않은를 이 형식을 위의 mean (SD) 형식으로 변환하십시오. 참고 :이 예제는 극히 미미합니다. 더 큰 계층 구조 (현재 4 x (mean + sd) 열과 2 x 3 행)를 갖지만 근본적인 문제는 동일합니다.

data.table에서
+0

아마도 'test' var을 포함하는 예제를 작성해야합니다. – Frank

답변

2
library(reshape2) 

formatted.table <- dcast(df, 'value' ~ group, fun.aggregate = function(x) { 
    return(sprintf('%0.1f (%0.1f)', mean(x), sd(x))) 
}) 

# "value"   A   B 
# value 2.0 (1.0) 7.7 (1.5) 

크리스의 대답은 비슷하지만 조금 청소기 (없이 "테스트"변수가 필요).

dplyr 패키지로이 유형의 집계를 수행 할 수도 있습니다.

+1

고마워, 프랭크, 나는 적절하게 편집했다. – jdobres

+0

당신은 테스트 변수가 필요 없지만 처음에는 그의 샘플 프레임에있었습니다 ... 그러나'sprintf'처럼! – Chris

+0

감사합니다. 나는 내가보기에 너무 조금 미미한 것을 볼 수있다. 사실, test1과 test2는 data.frame에서 별도의 * 열 *로 간주하고 요소의 수준이 아닙니다. 'dcast'는 오직 하나의'value.var'만을 취합니다 - 또는 방법이 있습니까? 나는'dcast'를 부르기 전에 항상 '용융'할 수 있었다. –

2

, 우리가 사용할 수 있습니다 (테스트 VAR 포함) dcast :

library(data.table) 

df = data.frame(
    group=c('A', 'A', 'A', 'B', 'B', 'B','A', 'A', 'A', 'B', 'B', 'B'), 
    value=c(1,2,3,6,8,9,1,2,3,6,8,9), 
    test=c(1,1,1,1,1,1,2,2,2,2,2,2)) 

dcast(df, test ~ group, fun.aggregate = function(x){ 
    paste(round(mean(x),1)," (", round(sd(x),1),")", sep = "") 
}) 
    test  A   B 
1 1 2 (1) 7.7 (1.5) 
2 2 2 (1) 7.7 (1.5) 
+0

Fyi, 당신은 거기에서 reshape2 패키지의'dcast'를 사용하고 있습니다; 그 패키지를 대신로드 할 수 있습니다. – Frank