2013-08-04 2 views
20

모든 컬럼에 대해 colMeans처럼 mean을 계산하는 것과 같이 R에 내장 함수가 있는지 궁금합니다. 내 자신의 미니 함수 (sd와 함께 apply 같은 것을 호출하는 복합 명령)를 작성하는 것만으로도 간단하지만, 코드를 깨끗하게 유지하면서 이미 사용할 수있는 것이 있다면 궁금합니다.컬럼 표준 편차 R

+0

... 거기에는 sgibb의'colSdColMeans'가 빠른 구현으로 권장됩니다. 수치 매트릭스의 경우 – flodel

+0

(충분히 쉽게) (아래 솔루션 참조) 수치 형 컬럼에서만 작동하는 데이터 프레임을위한 솔루션은 어떨까요? 또는 수식 인수를 사용하여 열을 선택합니까? '콜맨 (~ x1 + x2 + x3, 데이터 = d)'? – Spacedman

답변

39

일반적인 생각은 스윕의 기능입니다. 당신이 그룹에 사용하려는 경우 사용할 수

R> set.seed(42) 
R> M <- matrix(rnorm(40),ncol=4) 
R> apply(M, 2, sd) 
[1] 0.835449 1.630584 1.156058 1.115269 
R> 
+3

apply()에서 두 번째 인수 인 margin은 "함수가 적용될 아래 첨자를주는 벡터입니다." 2는 열 – rafaelvalle

2

: 당신은 하나 apply()입니다, 많은 옵션을 가지고

library(plyr) 
mydata<-mtcars 
ddply(mydata,.(carb),colwise(sd)) 



    carb  mpg  cyl  disp  hp  drat  wt  qsec  vs  am  gear 
1 1 6.001349 0.9759001 75.90037 19.78215 0.5548702 0.6214499 0.590867 0.0000000 0.5345225 0.5345225 
2 2 5.472152 2.0655911 122.50499 43.96413 0.6782568 0.8269761 1.967069 0.5270463 0.5163978 0.7888106 
3 3 1.053565 0.0000000 0.00000 0.00000 0.0000000 0.1835756 0.305505 0.0000000 0.0000000 0.0000000 
4 4 3.911081 1.0327956 132.06337 62.94972 0.4575102 1.0536001 1.394937 0.4216370 0.4830459 0.6992059 
5 6  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA 
6 8  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA 
+1

... 또는 그룹화하지 않음을 나타냅니다.'colwise (sd) (mydata)' – flodel

1

하는 기능을 가지고 fBasics 패키지 colStdevs

require('fBasics') 
set.seed(123) 
colStdevs(matrix(rnorm(1000, mean=10, sd=1), ncol=5)) 
[1] 0.9431599 0.9959210 0.9648052 1.0246366 1.0351268 
15

matrixStats 라이브러리의 colSds 기능을 사용하십시오.

library(matrixStats) 
set.seed(42) 
M <- matrix(rnorm(40),ncol=4) 
colSds(M) 

[1] 0.8354488 1.6305844 1.1560580 1.1152688 
+0

이 'colSds'는 평균뿐만 아니라 합계도 조정할 수 있습니까? –