2013-03-14 24 views
2

我試圖應用winsor函數在每個級別的因素(主體),以消除極端情況。我可以將winsor函數應用於整個列,但希望在主題內完成。在r,如何修剪或winsorize數據的因素

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 

理想情況下,我想輸出是含有相同數量的行作爲輸入,但與異常值(例如檢體3的倒數第二個值)的矢量以被移除和更換爲每溫莎功能。

回答

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 
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] 
+0

感謝里卡多,這似乎工作! – John 2013-04-08 15:12:26

+0

@ user2171370,沒問題。樂意效勞! – 2013-04-08 17:24:24