r - внутришкольная вензоризация
У меня есть формат данных в длинном формате data.set
, в котором каждый предмет имеет разные числовые значения (data.set$target_resp.rt
в соответствии с условиями. Я уже обработал мои данные по общему критерию, используя функцию DescTool Winsorize
(см. здесь для информации):
overall.criterion.2sd <- data.set$overall.mean+(2*data.set$overall.sd)
winsors.2 <- DescTools::Winsorize(data.set$target_resp.rt, maxval=overall.criterion.2sd[1])
Выше можно было определить maxval
в качестве первого значения переменной overall.criterion.2sd
, поскольку это одинаковые значения для всех предметов. Теперь я хотел бы winsorize мои данные по предмету, то есть мне нужно запустить внутрисубъектную построчную винсоризацию. Вот моя попытка, с criterion.2sd
это просто вектор из N значений (N= № предметов):
criterion.2sd <- data.set$rt.mean+(2*data.set$rt.sd)
within.winsors.2 <- data.set %>% group_by(Nome, Cognome) %>%
Winsorize(data.set$target_resp.rt, maxval=unique(criterion.2sd))
Появляется следующая ошибка:
Ошибка в
[<-.data.frame
(*tmp*
, x
Я понимаю, что что-то не так, кардинальность maxval
переменная, но я не могу понять, как это исправить. Кто-нибудь может помочь?
Вот образец набора данных data.set
(надеюсь, этого достаточно; дайте мне знать, если это правильный формат):
subject target_resp.rt rt.mean rt.sd
1 1 1.0398901 0.9016781 0.3109358
2 1 0.6887729 0.9016781 0.3109358
3 1 0.7691720 0.9016781 0.3109358
4 1 1.0064900 0.9016781 0.3109358
5 1 0.8195999 0.9016781 0.3109358
6 2 0.8410320 1.0500845 0.4210796
7 2 0.8229311 1.0500845 0.4210796
8 2 0.9250839 1.0500845 0.4210796
9 2 1.0085750 1.0500845 0.4210796
10 2 1.1406291 1.0500845 0.4210796
11 3 0.5561039 0.749789 0.2350127
12 3 0.6022139 0.749789 0.2350127
13 3 0.8560688 0.749789 0.2350127
14 3 0.5886030 0.749789 0.2350127
15 3 0.5520449 0.749789 0.2350127
1 ответ
Это проблема со смешанным синтаксисом dplyr. В исходном вопросе вы передаете вектор Winsorize
, но data.set %>% group_by(Nome, Cognome)
это набор данных и труба (%>%
) передает весь набор данных первому аргументу Winsorize
значит ты действительно звонишь
Winsorize(x = data.set, minval = ..., maxval = ...)
То, что вы действительно хотите, это использовать mutate
после group_by
изменить target_resp.rt
; синтаксис выглядит так:
data.set %>% group_by(subject) %>%
mutate(target_winsorized = Winsorize(target_resp.rt, maxval=unique(overall.criterion.2sd))
Это создает новую переменную в наборе данных target_winsorized
со свойствами, которые вы хотите. В будущем вы также можете сохранить overall.criterion.2sd
внутри набора данных тоже.
Документы
Проверьте dplyr
документы, если хотите узнать больше о синтаксисе и dplyr
стиль.