楼主: 孔雯子
13807 9

[问答] R语言如何对数据进行上下1%的缩尾处理,有专门的函数吗? [推广有奖]

  • 0关注
  • 0粉丝

本科生

48%

还不是VIP/贵宾

-

威望
0
论坛币
527 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
30 点
帖子
1
精华
0
在线时间
197 小时
注册时间
2013-10-11
最后登录
2022-10-20

楼主
孔雯子 学生认证  发表于 2020-8-9 12:58:31 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
请问R语言如何对数据进行缩尾处理?有专门的函数吗?winsorize
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:R语言 Winsorize winsor wins Win

沙发
nieqiang110 学生认证  发表于 2020-8-10 17:48:35
EEG_w<-Winsorize(EEG[3:739], minval = NULL, maxval = NULL, probs = c(0.01, 0.99), na.rm = TRUE)
已有 1 人评分论坛币 收起 理由
cheetahfly + 10 观点有启发

总评分: 论坛币 + 10   查看全部评分

藤椅
yxh1125 学生认证  发表于 2021-1-15 20:38:46
nieqiang110 发表于 2020-8-10 17:48
EEG_w
为什么运行时显示没有这个函数呢?谢谢

板凳
tzz925931604 学生认证  发表于 2021-1-15 21:41:12
?Winsorize
No documentation for ‘Winsorize’ in specified packages and libraries:
you could try ‘??Winsorize’
> ??Winsorize

winsor {psych}        R Documentation
Find the Winsorized scores, means, sds or variances for a vector, matrix, or data.frame


报纸
乐天天12300 发表于 2021-1-15 23:31:25
  1. myfunc<- function(x, direction = "both", trim = 0.01, data) {
  2.   if (! is.data.frame(data)) stop("data必须为数据框")
  3.   if (! direction %in% c("both", "left", "rigth")) {
  4.     stop("direction 参数仅限'both','left', 'rigth' ")
  5.   }
  6.   myda <- unlist(data[deparse(substitute(x))])
  7.   if (direction == 'both') {
  8.     quanmax <- quantile(myda, 1 - trim/2)
  9.     quanmin <- quantile(myda, trim/2)
  10.     data <- data[quanmin < myda & myda < quanmax, ]
  11.   } else if (direction == 'left') {
  12.     quanmin <- quantile(myda, trim)
  13.     data <- data[myda > quanmin, ]
  14.   } else {
  15.     quanmax <- quantile(myda, 1 - trim)
  16.     data <- data[myda < quanmax, ]
  17.   }
  18.   data
  19. }

  20. mydata <- as.data.frame(cbind(x = 1:1000, y = x[order(-x)]))
  21. myfunc(x, direction = 'left', trim = 0.01, mydata)
复制代码

地板
yxh1125 学生认证  发表于 2021-1-16 12:29:17
乐天天12300 发表于 2021-1-15 23:31
这个应该是截尾,不是缩尾

7
乐天天12300 发表于 2021-1-16 13:07:08
yxh1125 发表于 2021-1-16 12:29
这个应该是截尾,不是缩尾
把剔除换成替换就行了

8
yxh1125 学生认证  发表于 2021-1-16 16:42:48
乐天天12300 发表于 2021-1-16 13:07
把剔除换成替换就行了
好的,谢谢

9
tyy0303 发表于 2022-2-21 21:29:06
yxh1125 发表于 2021-1-16 16:42
好的,谢谢
请问是怎么改动的?是需要每个变量进行重复进行 还是整个数据框可以运用?谢谢

10
赵安豆 发表于 2024-11-5 19:17:41
在R中并没有内置的专门针对缩尾(Winsorizing)处理的函数,但是你可以使用`car`包中的`winzor`函数或者自己编写一个简单的函数来实现数据上下1%的缩尾。以下是一个自定义的winsorize函数示例:

```r
# 自定义winsorize函数
winsorize <- function(x, lower=0.01, upper=0.99) {
  q_low <- quantile(x, lower)
  q_upp <- quantile(x, upper)
  
  x[x < q_low] <- q_low
  x[x > q_upp] <- q_upp
  
  return(x)
}
```

或者使用`car`包的winsorize函数:

```r
# 安装并加载car包
install.packages("car")
library(car)

# 使用car包中的winsorize函数进行数据上下1%的缩尾处理
data_wins <- winsorize(data, probs=c(0.01, 0.99))
```

注意,`car`包中的`winzor`函数实际上叫做`outlierTest`,但它没有直接实现Winsorizing功能。因此,你可能需要自己编写或使用上面自定义的winsorize函数。

正确的函数名是`car::winsor`:

```r
# 使用car包中的winsor函数进行数据上下1%的缩尾处理
data_wins <- car::winsor(data, probs=c(0.01, 0.99))
```

其中,probs参数设置要保留的最小和最大百分位数。在上述示例中,我们设置`probs = c(0.01, 0.99)`来实现数据上下1%的缩尾处理。

如果想使用`car::winsorize`函数进行数据的缩尾处理,请确保已经安装并加载了`car`包。

此文本由CAIE学术大模型生成,添加下方二维码,优先体验功能试用



您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-5 21:46