Перегруппировать данные для ANOVA - PullRequest
4 голосов
/ 08 октября 2010

Я не совсем понял R и как переставить данные.У меня есть старый файл данных SPSS, который нужно переставить, чтобы я мог провести ANOVA в R.

Мой текущий файл данных имеет следующий формат:

ONE <- matrix(c(1, 2, 777.75, 609.30, 700.50, 623.45, 701.50, 629.95, 820.06, 651.95,"nofear","nofear"), nr=2,dimnames=list(c("1", "2"), c("SUBJECT","AAYY", "BBYY", "AAZZ", "BBZZ", "XX")))

И мне нужно переставить его в это:

TWO <- matrix(c(1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 777.75, 701.5, 700.5, 820.06, 609.3, 629.95, 623.95, 651.95), nr=8, dimnames=list(c("1", "1", "1", "1", "2", "2", "2", "2"), c("SUBJECT","AA", "ZZ", "XX", "RT")))

Я уверен, что есть простой способ сделать это, а не ручное кодирование.Спасибо за внимание.

Ответы [ 2 ]

9 голосов
/ 08 октября 2010

Это должно сделать это. Вы можете немного настроить его, но это идея:

library(reshape)
THREE <- melt(as.data.frame(ONE),id=c("SUBJECT","XX"))
THREE$AA <- grepl("AA",THREE$variable)
THREE$ZZ <- grepl("ZZ",THREE$variable)
THREE$variable <- NULL

# cleanup
THREE$XX <- as.factor(THREE$XX)
THREE$AA <- as.numeric(THREE$AA)
THREE$ZZ <- as.numeric(THREE$ZZ)
3 голосов
/ 08 октября 2010

Reshape и reshape () оба помогают с такими вещами, но в этом простом случае, когда вам нужно генерировать переменные, ручное кодирование довольно просто, просто воспользуйтесь преимуществами автоматической репликации в R.

TWO <- data.frame(SUBJECT = rep(1:2,each = 4),
                  AA = rep(1:0, each = 2),
                  ZZ = 0:1,
                  XX = 1,
                  RT = as.numeric(t(ONE[,2:5])))

Это дает ДВУ, о котором вы просили, но не может легко обобщиться на большее.Я думаю, что это имеет больше смысла

n <- nrow(ONE)
TWO <- data.frame(SUBJECT = rep(ONE$SUBJECT, 4),
                  AB = rep(1:0, each = n),
                  YZ = rep(0:1, each = 2*n),
                  fear = ONE$XX,
                  RT = unlist(ONE[,2:5]))

Последний дает более репрезентативные имена переменных и обрабатывает вероятный случай, когда ваши данные на самом деле намного больше с изменяющимися XX (страх) и большим количеством субъектов.Кроме того, учитывая, что вы читаете его из файла данных SPSS, тогда ОДИН фактически является фреймом данных с числовыми числами и факторизованными символьными столбцами.Изменение формы было только этой частью кода ...

TWO <- data.frame(SUBJECT = rep(ONE$SUBJECT, 4),
                  fear = ONE$XX,
                  RT = unlist(ONE[,2:5]))

Вы можете добавить другие переменные позже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...