R - Разделить один вектор на два отдельных вектора по условию (пациент / контрольный пациент)

Я очень плохо знаком с R и работаю с ЭЭГ, полученными от спящих пациентов. Теперь у меня есть таблица, похожая на эту:

 ID   C3-M2  C4-M1  Disorder
 12     347    325   Control
 13     397    346   Bipolar
 14     368    363   Control
 15     370    379   Control
 16     368    310   Bipolar

Поскольку мне нужно среднее значение C3-M2 и C4-M1, я создал вектор:

fast_spin_numb <- c((`C3-M2`+ `C4-M1`)/2)

fast_spin_numb поэтому должен содержать 5 значений.

Теперь я хотел бы создать два отдельных вектора, из которых fast_spin_bipo должен содержать только средства пациентов с биполярным расстройством, аfast_spin_cont только средства средств управления.

Я попробовал это с

split(fast_spin_numb, disorder == "control", drop = FALSE) 

но я не мог найти решение, как поместить числа автоматически в новые векторы.

Как хорошо я пробовал это:

tapply(fast_spin_numb, disorder, shapiro.test)

что позволяет мне хотя бы запустить несколько тестов. Но это не помогает мне с созданием qqplot (только для элементов управления), например.

Большое спасибо уже!!

1 ответ

Рассматривать byобъектно-ориентированная оболочка tapply который может подмять фрейм данных одним или несколькими факторами, чтобы получить список выходных данных функции. Ниже возвращается именованный список векторов.

Данные

txt = ' ID   "C3-M2"  "C4-M1"  Disorder
12     347    325   Control
13     397    346   Bipolar
14     368    363   Control
15     370    379   Control
16     368    310   Bipolar'

df <- read.table(text=txt, header=TRUE)

Код

mean_vectors <- by(df, df$Disorder, FUN=function(i) (i$`C3.M2`+ i$`C4.M1`)/2)

mean_vectors$Control
# [1] 336.0 365.5 374.5
mean_vectors$Bipolar
# [1] 371.5 339.0
Другие вопросы по тегам