2010-10-08 88 views
4

我還沒有完全理解R以及如何重新排列數據。我有一個需要重新安排,所以我可以在R進行方差分析ANOVA重新排列的數據

我現在的數據文件具有這種格式的舊SPSS數據文件:

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"))) 

我相信有一個簡單的方法來做到這一點,而不是手動編碼。感謝您的考慮。

回答

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) 
+0

這對我有幫助。非常感謝。 – 2010-10-08 09:53:17

+0

+1智能。感謝您介紹grepl – 2010-10-08 15:51:14

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])) 

您可以在其他變量之後添加。

+0

這非常有趣。謝謝。 – 2010-10-08 12:43:19