我有多个数据文件(以制表符分隔的txt文件)格式如下:
制作了一些示例文件
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(具有因子条件)。到目前为止,我已经以极其丑陋的方式完成了这项工作,并且按主题排列(我更喜欢将行格式化为主题条件)。
我当前的尝试使用for循环:
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")
我以1:9
分数填写1:9的colsScore<-as.vector(tapply(data$Score,list(data$Condition,data$Reqresponse),mean))
for(o in 1:9)
{
all_data [i, o] <- Score[o]
}
然后以我想要的方式修剪我的RT值并将其放入all_data的cols 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)
我会使用ddply
包中的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