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
Trả lời
Ý 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>
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
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
... hoặc không có nhóm: 'colwise (sd) (mydata)' – flodel
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
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
Bạn có thể điều chỉnh 'colSds' này cho tổng không, chỉ cho phương tiện? –
... ở đó, tôi đặc biệt khuyên bạn nên sử dụng 'colSdColMeans' của sgibb để triển khai nhanh. – flodel
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