ANOVA

2013-03-15 3 views
1

내가 (파일이 txt 분리 탭) 여러 데이터 파일이 너무 같은 형식 :ANOVA

만들어진 몇 가지 예는

https://docs.google.com/file/d/0B20HmmYd0lsFVGhTQ0EzRFFmYXc/edit?usp=sharing

https://docs.google.com/file/d/0B20HmmYd0lsFbWxmQzV6X0o2Y1E/edit?usp=sharing

을 파일
Condition Block Session Stimuli Score Reqrespons Act RT extra 
X   3  3 asdfa  1   a  a 500 0 
Y   1  2 qewrq  0   b  a 1100 0 

외계 RT를 제외하고 RT 및 파일 점수에 대한 ANOVA를 수행하고 싶습니다 (factor conditio 엔). 지금까지 필자는 극히 추악한 방식으로이 작업을 수행했으며 주제별 행을 사용했습니다 (필자는 행을 subjectxcondition으로 포맷하는 것을 선호합니다).

나의 현재 시도는 for 루프를 사용하여 :

Score<-as.vector(tapply(data$Score,list(data$Condition,data$Reqresponse),mean)) 

for(o in 1:9) 
{ 
all_data [i, o] <- Score[o] 
} 

그리고 내가 원하는 방식으로 내 RT 값을 트림 및 점수 1-9로 9 :

all_data<-data.frame(rbind(1:27)) #make empty data.frame 
all_data 
for(i in 1:2) 
{ 
n= paste(i,".txt", sep="") 
a<- sprintf("table%d", i, i) 
data <- read.table(toString(n), header = TRUE, sep = "\t") 

내가 COLS 1을 작성 all_data의 열 10을 넣으십시오

data <- data[which(data$RT>200),] 
data <- do.call(rbind,by(data,data$Condition,function(x) x[!abs(scale(x$RT)) > 3,])) 
RT<-as.vector(tapply(data$RT,list(data$Condition,data$Reqresponse, data$Score),mean)) 
for(j in 1:18) 
{ 
all_data [i, j+9] <- RT[j] 
} 
} 

또한이 코드는 R에서 괜찮은 사람에게는 미학적으로 불쾌감을 주어야합니다. 나에게 당신이 좋아하는 경우에 그것을 고치는 방법

+0

안녕하세요. 우리가 1.txt, 2.txt의 내용에 대한 좋은 예가 없기 때문에 누구에게나 당신을 도울 수 없습니다. 게시 한 예제 데이터에는'read.table()'에 의해 읽혀지는 데 필요한 탭이 없습니다. 아마도 1.txt 및 2.txt를 Google 문서 도구 또는 이와 유사한 것으로 업로드하고 링크 할 수 있습니까? – Marius

+0

좋아, 내가 예제 데이터를 더 잘 만들거야! 제 2의 생각에 – luke123

+0

이 예제 데이터 파일을 만들고 업로드합니다. – luke123

답변

1

plyr에서 나는 이것을 할 것이다. 예 :

require(plyr) 
res <- lapply(list.files(pattern='^[1-2].txt'),function(ff){ 
    ## you read the file 
    data <- read.table(ff, header=T, quote="\"") 
    ## remove the outlier 
    data <- data[data$RT>200,] 
    data <- ddply(data,.(Condition),function(x) x[!abs(scale(x$RT)) > 3,]) 
    ## compute the mean 
    ddply(data,.(Condition,Reqresponse,Score),summarise,RT=mean(RT)) 
}) 

[[1]] 
    Condition Reqresponse Score RT 
1   X   a  0 500 
2   X   a  1 750 
3   X   b  0 500 
4   X   b  1 500 
5   Y   a  0 400 
6   Y   a  1 640 
7   Y   b  1 1000 
8   Z   a  0 1000 
9   Z   a  1 1675 
10   Z   b  0 400 

[[2]] 
    Condition Reqresponse Score RT 
1   X   a  0 500 
2   X   a  1 750 
3   X   b  0 500 
4   X   b  1 500 
5   Y   a  0 400 
6   Y   a  1 640 
7   Y   b  1 1000 
8   Z   a  0 1000 
9   Z   a  1 1675 
10   Z   b  0 400 
+0

내가 비교할 수 있도록 자신의 파일 이름을 기반으로 특정 데이터 파일을 점수를 역전시킬 수있는 내 for 루프에서 가지고있는 한 가지가 % % c (2,4,6,7,9,11,14,16,18,19,21,23,25,28,30,32,34,36) {반대로 점수를 매기는 일}, can plyr 함수에 이것을 포함시키는 방법을 생각하십니까? – luke123

+0

@ luke123 너 OP에서이 줄을 빼 냈어. 'seq (from = 1, to = 4001, by = 500) ...'? 그러나이 결과는 당신이 예상했던 것과 거의 비슷합니까? – agstudy

+0

네, 그 결과는 큰 환호성이었습니다. 제가 생각하기에 원래 게시물을 부풀게하는 줄 이었지만 지금은 포함시켜야한다고 생각합니다. 특정 파일은 응답 a와 b를 가지고 있습니다. % c (2,4,6,7,9,11,14,16,18,19,21,23,25,28)에서 % i와 같이 역순으로 스크립트에 썼습니다. , 30,32,34,36) { 데이터 $ Reqresponse [데이터 $ Reqresponse == "a"] <- "TMP" 데이터 $ Reqresponse [데이터 $ Reqresponse == "b"] <- "a" 데이터 $ Reqresponse [데이터 $ Reqresponse == "TMP"] <- "b" } 루프없이 파일 이름을 기반으로이를 수행 할 수 있는지 확실하지 않습니다 (어떤 파일을 결정합니다). 나는 항상 이러한 값을 역전시킬 수 있지만 이드는 아니라 – luke123