Dataframe 对矩阵进行排序

Dataframe 对矩阵进行排序,dataframe,Dataframe,我想winsorize一个矩阵,有6列,非NA,没有无限值 我使用robustHD包和代码 winsorize(df) 但我收到以下错误消息: 特征值(R,对称=真)中的错误:“x”中的值无限或缺失 有人知道问题出在哪里吗?或者我可以用另一个软件包试试别的方法吗?Winsorizing非常简单,而且非常灵活。创建自己设计的功能很容易。困难的部分是决定什么样的设计最合适 一个例子 set.seed(1) mat <- matrix(sample(-99:99, 30), 6) ran

我想winsorize一个矩阵,有6列,非NA,没有无限值

我使用
robustHD
包和代码

winsorize(df)
但我收到以下错误消息:

特征值(R,对称=真)中的错误:“x”中的值无限或缺失


有人知道问题出在哪里吗?或者我可以用另一个软件包试试别的方法吗?

Winsorizing非常简单,而且非常灵活。创建自己设计的功能很容易。困难的部分是决定什么样的设计最合适

一个例子

set.seed(1)

mat <- matrix(sample(-99:99, 30), 6)

ran <- quantile(mat, c(0.20, 0.80))

mat.w <- mat
mat.w[mat < ran[1]] <- ran[1]
mat.w[mat > ran[2]] <- ran[2]

mat.w - mat

#       [,1]  [,2]  [,3]  [,4] [,5]
# [1,]   0.0 -38.8   0.0   0.0  0.0
# [2,]   0.0   0.0   0.0   0.0  0.0
# [3,]   0.0   0.0   0.0 -23.8 36.8
# [4,] -34.8  27.8   0.0   1.8  0.0
# [5,]   0.0   0.8   0.0   0.0 -4.8
# [6,] -30.8   5.8 -36.8  16.8  0.0

这种基于百分位数的制胜方式可能是最常见的方法,但对于如何制胜没有真正的限制或规则

例如,我们可以基于与平均值的偏差

cen <- mean(mat)
range(mat - cen)
# -91.8  88.2
cen
cen <- mean(mat)
range(mat - cen)
# -91.8  88.2
mat.w <- mat
mat.w[mat - cen < -70] <- -70
mat.w[mat - cen >  70] <-  70

mat.w - mat

#      [,1] [,2] [,3] [,4] [,5]
# [1,]    0  -13    0    0    0
# [2,]    0    0    0    0    0
# [3,]    0    0    0    2   27
# [4,]   -9   18    0    0    0
# [5,]    0    0    0    0    0
# [6,]   -5    0  -11    7    0