R вычисляет среднее значение двух ячеек в кадре данных неправильно - PullRequest
0 голосов
/ 25 апреля 2019

Мне нужно рассчитать различия конкретного измерения после и до смены для одного работника и усреднить эти два различия. Одна разница равна 9, а другая - -2, но когда я использую «среднее» для вычисления среднего, R показывает 9, а не 4,5. Что я делаю неправильно. Мой код (4 и 8 - пост, 1 и 5 - предварительно):

   mean((p2res$feno[p2res$no=="4"&p2res$subject.id==4])-
   (p2res$feno[p2res$no=="1"&p2res$subject.id==4])+
   (p2res$feno[p2res$no=="8"&p2res$subject.id==4])-
   (p2res$feno[p2res$no=="5"&p2res$subject.id==4])) 

    p2res <- structure(list(subject.id = c(4, 4, 4, 4, 4, 4, 4, 4, 6, 
    6, 6, 6, 6, 6, 6, 6), no = c(1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 
    5, 6, 7, 8), feno = c(24, 23, 40, 35, 28, 25, 22, 26, 19, 19, 18, 
    19, 15, 14, 29, 18)), row.names = c(NA, -16L), class = 
    c("data.frame"))

      subject.id  no  feno
               4  1   24
               4  2   23
               4  3   40
               4  4   35
               4  5   28
               4  6   25
               4  7   22
               4  8   26
               6  1   19
               6  2   19
               6  3   18
               6  4   19
               6  5   15
               6  6   14
               6  7   29
               6  8   18

Кроме того, как я могу сделать функцию, чтобы сделать это для других измерений?

Ответы [ 2 ]

1 голос
/ 25 апреля 2019

Это потому, что R интерпретирует ваш код неправильно отформатированный для ввода в mean, учитывая, что mean может вычислять только числовые или логические векторы. Вы вычисляете выражение перед вычислениемсреднее, т.е.Вы вычисляете среднее значение 9, в результате чего получается 9.

Кроме того, 35-24 возвращает 11, тогда как 26-28 возвращает -2.Возможно, вы имели в виду другое значение?Таким образом, среднее значение для 11 и -2 равно 4,5, поэтому при условии, что вы хотели поставить 11, а не 9.

Что вы можете сделать (если вы не хотите писать функцию), это определить переменную длины 2.x<-c(((p2res$feno[p2res$no=="4"&p2res$subject.id==4])-(p2res$feno[p2res$no=="1"&p2res$subject.id==4])), ((p2res$feno[p2res$no=="8"&p2res$subject.id==4])-(p2res$feno[p2res$no=="5"&p2res$subject.id==4])))

Затем

mean(x)

Дает 4,5

0 голосов
/ 25 апреля 2019

Вы можете создать что-то более удобочитаемое и с которым легче работать, используя subset для извлечения данных для subject.id 4.

subj4 <- subset(p2res, subject.id==4)
mean(c(subj4$feno[4]-subj4$feno[1], subj4$feno[8]-subj4$feno[5]))

Использование attach для subj4 позволяет R найти переменную без добавления имени переменной subj4. Это еще больше увеличивает читабельность.

subj4 <- subset(p2res, subject.id==4)
attach(subj4)
mean(c(feno[4]-feno[1], feno[8]-feno[5]))

Используйте detach(subj4), чтобы отменить это, если хотите.

...