重新排列ANOVA的数据

时间:2010-10-08 09:00:04

标签: r

我还没有完全了解R以及如何重新排列数据。我有一个旧的SPSS数据文件需要重新排列,所以我可以在R中进行ANOVA。

我当前的数据文件格式为:

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 个答案:

答案 0 :(得分:9)

这应该这样做。你可以调整一下,但这就是这个想法:

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)

答案 1 :(得分:3)

重塑和重塑()都有助于这种东西,但在这种简单的情况下你必须生成变量手动编码非常简单,只需利用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数据文件中读取它,那么ONE实际上是一个带有数字和因子字符列的数据框。重塑只是代码的这一部分...

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

之后你可以添加其他变量。