gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 05:41:09 29 4
gpt4 key购买 nike

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

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))'

有人可以帮我解决这个问题吗?

最佳答案

您可以编写自定义函数来为您执行此操作。它接受一个向量,删除最小值和最大值,并返回剩余值的 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

关于R:在删除最小值和最大值后计算每行中选定列的 SD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34637659/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com