我正在尝试在一个因子(主题)的每个级别应用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的第二个最后一个值)。
答案 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