在r中,如何通过因子修剪或赢得数据

时间:2013-03-14 20:15:44

标签: r

我正在尝试在一个因子(主题)的每个级别应用winsor函数,以便删除极端情况。我可以将winsor函数应用于整个列,但是想在主题内执行。

Subject RT
1       402
1       422
1       155
1       460
2       283
2       224
2       346
2       447
3       415
3       161
3       1
3       343

理想情况下,我希望输出是一个包含与输入相同行数的向量,但是要根据winsor函数删除和替换异常值(例如,Subject 3的第二个最后一个值)。

2 个答案:

答案 0 :(得分:1)

您正在寻找?by功能

 #  for example: 
 by(myDF, myDF$Subject, winsor(myDF$RT))

但是,使用data.table(而非data.frame)可能更适合您

### broken down step by step: 

library(data.table)
myDT <- data.table(myDF)

myDT[, winsorResult := winsor(RT), by=Subject]

答案 1 :(得分:0)

 library(psych)
 transform(dat,win = ave(RT,Subject,FUN=winsor))
   Subject  RT   win
1        1 402 402.0
2        1 422 422.0
3        1 155 303.2
4        1 460 437.2
5        2 283 283.0
6        2 224 259.4
7        2 346 346.0
8        2 447 386.4
9        3 415 371.8
10       3 161 161.0
11       3   1  97.0
12       3 343 343.0