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