2014-10-23 4 views
2

그룹화 된 데이터의 각 열에 대한 중간 : 나는 각 그룹에 대해 각 열의 중간 값을 산출 할 수 있도록하려는계산 나는이처럼 보이는 dataframe이

genotype  DIV3  DIV4 ... 
WT   12.4  15.2 
WT   35.4  35.3 
HET   1.3  1.2 
HET   1.5  5.2 

을,하지만 난 잘 모르겠어요 R에서이 작업을 수행하는 가장 좋은 방법입니다. 다른 데이터 세트에 대해 일정하게 유지되지 않을 수 있기 때문에 유전자형을 호출 할 필요가 없다면 더 좋을 것입니다.

답변

5

나는 놀라운 아무도 그것을 간단한, 기본 R 기능은 작업의 이러한 종류에 포함 그대로보고, 아직 aggregate을 제안했다 것을 찾을 수 있습니다. 예 :

aggregate(. ~ genotype, data=dat, FUN=median) 

# genotype DIV3 DIV4 
#1  HET 1.4 3.20 
#2  WT 23.9 25.25 
+0

과 같은 것을 시도해 볼 수도 있지만 World Series를 보면서 바쁩니다. –

2

이 시도 :

apply(df[,-1], 2, function(x) tapply(x, df[,1], mean)) 
2

나는이에 가장 적합한 것으로 ddply 발견했다. 일반적으로

medians = ddply(a, .(genotype), numcolwise(median)) 
+0

내가 대답이 유전자형 – rsoren

+1

@Reed를 참조 생각하지 생각했다, 나는 그것이 특정을 참조 할 필요가 없습니다 의미 genotype (예 : "WT"또는 "HET") – bdevil

0

, 내가 대신 plyrdplyr 솔루션을 사용하는 것이 좋습니다 생각합니다. 속도와 가독성 측면에서 큰 개선이 될 것으로 예상됩니다. this link을 참조하십시오. 예를 들어

는 :

require(dplyr) 
df %>% 
    group_by(genotype) %>% 
    summarize(
    DIV3_median = median(DIV3), 
    DIV4_median = median(DIV4) 
) 
+3

'summarise_each (funs (median), contains ("DIV"))' – jazzurro

2

data.table 버전도 좋다 :

또한
library(data.table) 
ddt[,lapply(.SD, median),by=genotype] 
    genotype DIV3 DIV4 
1:  WT 23.9 25.25 
2:  HET 1.4 3.20