当前位置:  开发笔记 > 编程语言 > 正文

R:在删除最小值和最大值后,在选择的列上计算每行中的SD

如何解决《R:在删除最小值和最大值后,在选择的列上计算每行中的SD》经验,为你挑选了1个好方法。

我想在删除该选择中的最小值和最大值后,计算数据框中每行的标准偏差.这是一个例子:

set.seed(1)
dat <- data.frame(matrix(sample(c(1:100), 10, replace=TRUE), ncol=5))

我设法为每一行计算我感兴趣的列的sd(1:4):

dat <- transform(dat, sd = apply(dat[,1:4], 1, sd))
show(dat)

  X1 X2 X3 X4 X5       sd
1 27 58 21 95 63 33.95463
2 38 91 90 67  7 24.93324

但是,我无法弄清楚如何排除min(dat[1,1:4])max(dat[1,1:4])计算之前sd().结果应该是这样的:

  X1 X2 X3 X4 X5       sd
1 27 58 21 95 63 21.92031     # notice: sd calculated by hand using 'sd(c(27,58))'
2 38 91 90 67  7 16.26346     # notice: sd calculated by hand using 'sd(c(67,90))'

有人可以帮我弄这个吗?



1> Heroka..:

您可以编写自定义函数来为您执行此操作.它接受一个向量,删除最小值和最大值,并返回剩余值的sd.当然,您也可以将其编写为匿名函数,但有时将函数分开使代码更具可读性.

sd_custom <- function(x){
  x <- x[x!=min(x) & x!=max(x)]
  return(sd(x))
}

dat$sd <- apply(dat[,1:4], 1, sd_custom)

> dat
  X1 X2 X3 X4 X5       sd
1 27 58 21 95 63 21.92031
2 38 91 90 67  7 16.26346

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有