我想知道 R 中是否有一个内置函数可以计算列的标准偏差,就像colMeans
计算mean
每列一样。编写我自己的迷你函数(调用apply
with之类的复合命令sd
)很简单,但我想知道是否已经有一些东西可以使用,同时还能保持我的代码看起来干净。
问问题
136523 次
4 回答
68
总体思路是将功能扫过。你有很多选择,一个是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>
于 2013-08-04T21:48:35.907 回答
17
使用库中colSds
的函数matrixStats
。
library(matrixStats)
set.seed(42)
M <- matrix(rnorm(40),ncol=4)
colSds(M)
[1] 0.8354488 1.6305844 1.1560580 1.1152688
于 2013-08-05T03:06:13.060 回答
3
如果要将其与组一起使用,可以使用:
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
于 2013-08-04T22:08:22.370 回答
2
包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
于 2013-08-05T00:59:19.527 回答