создание z-показателей для подмножества строк - PullRequest
3 голосов
/ 24 февраля 2012

Я новичок в программировании на R и у меня проблемы с некоторым базовым кодом.

У меня есть кадр данных со следующими столбцами: условие (фактор), пользователь (фактор) и чувствительность (int).Для каждого пользователя есть 20 пунктов чувствительности.Мне нужно создать новый столбец со стандартизированным показателем чувствительности для каждого пользователя.Таким образом, я могу сравнить оценки чувствительности по пользователям.У меня проблемы с написанием цикла (или чего-то подобного), который может создавать z-оценки для каждого элемента на пользователя.

У меня 14 уникальных пользователей (это будет увеличиваться) с 20 элементами чувствительности.

Спасибо.

Ответы [ 2 ]

1 голос
/ 24 февраля 2012

В этом случае цикл не требуется. Вместо этого используйте векторизацию. Давайте рассмотрим следующие смоделированные данные: (не уверен, что он точно воспроизведет ваш набор данных, но, надеюсь, вы получите общее представление)

dfrm <- data.frame(cond=gl(2, 1, 100, labels=LETTERS[1:2]), 
                   user=gl(50, 2, labels=paste("id", 1:20, sep="")), 
                   sensitivity=runif(100, 1, 5))

Вычисление z-показателей так же просто, как

dfrm$z.sensitivity <- scale(dfrm$sensitivity)

Если вы хотите, чтобы z-показатели были условными для cond, то вы можете сделать либо

with(dfrm, tapply(sensitivity, cond, scale))

или, используя plyr ,

ddply(dfrm, c("cond"), transform, sensitivity.z = scale(sensitivity))
1 голос
/ 24 февраля 2012

Я бы посмотрел на пакет plyr.И если я не ошибаюсь, как это часто бывает, scale - это функция, которую вы ищете.Если ваши данные в формате data.frame df:

library(plyr)
ddply(df, .(user), function(x){x$scaled.sensitivity = scale(x$sensitivity)
                               return(x)})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...