2013-08-04 77 views
20

Tôi đã tự hỏi nếu có một hàm dựng sẵn trong R có thể tính độ lệch chuẩn cho các cột giống như colMeans tính mean cho mỗi cột. Nó sẽ đủ đơn giản để viết chức năng mini của riêng tôi (một lệnh ghép nối gọi những thứ như apply với sd), nhưng tôi đã tự hỏi liệu có cái gì tôi có thể sử dụng trong khi vẫn giữ mã của tôi trông sạch sẽ không.Độ lệch chuẩn cột R

+0

... ở đó, tôi đặc biệt khuyên bạn nên sử dụng 'colSdColMeans' của sgibb để triển khai nhanh. – flodel

+0

cho ma trận số, đủ dễ dàng (giải pháp bên dưới), nhưng làm thế nào về giải pháp cho một khung dữ liệu chỉ hoạt động trên các cột số? Hoặc sử dụng một đối số công thức để chọn các cột? 'colmean (~ x1 + x2 + x3, dữ liệu = d)'? – Spacedman

Trả lời

39

Ý tưởng chung là để quét chức năng trên. Bạn có nhiều lựa chọn, một là apply():

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

Khi áp dụng(), đối số thứ hai, lề, "là một vectơ cho các bảng con mà hàm sẽ được áp dụng." 2 cho biết các cột – rafaelvalle

2

Nếu bạn muốn sử dụng nó với các nhóm, bạn có thể sử dụng:

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

... hoặc không có nhóm: 'colwise (sd) (mydata)' – flodel

1

Gói fBasics có chức năng 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

Sử dụng hàm colSds từ thư viện matrixStats.

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

[1] 0.8354488 1.6305844 1.1560580 1.1152688 
+0

Bạn có thể điều chỉnh 'colSds' này cho tổng không, chỉ cho phương tiện? –

Các vấn đề liên quan