我有以下数据集:
data<-NULL
pA<-NULL
pB<-NULL
field<-c("A","A","A","A","B","B","B","B")
trt<-c("X","X","Y","Y")
patternA<-c("none","none","none","none","T","T","none",
"none","T","T","none","none","T","T","T","T")
patternB<-c("T","T","T","T","T","T","T","T","none","none","T","T","T","T","T","T")
df<-data.frame(field,trt,patternA,patternB)
现在我尝试做这样的事情:
for (i in unique(df$field)){
for (j in unique(trt))
{ pA[j]<-nrow(df[df$patternA=="T"&df$trt==j,])/nrow(df[df$trt==j,])
pB[j]<-nrow(df[df$patternB=="T"&df$trt==j,])/nrow(df[df$trt==j,])
}
fd<-i
p<-cbind(fd,pA,pB)
data<-rbind(data,p)
}
获得类似的东西。这是我通过运行df by field的两个循环来实现的(首先是字段“A”,然后是字段“B”)
数据:
field pA pB
X "A" "0.5" "0.5"
Y "A" "0" "1"
X "B" "1" "1"
Y "B" "0.5" "1"
然而,R给了我类似的东西:
fd pA pB
X "A" "0.75" "0.75"
Y "A" "0.25" "1"
X "B" "0.75" "0.75"
Y "B" "0.25" "1"
这不是我想要的。我做错了什么?我想尽可能坚持使用循环方法,尽管我知道一些缺点。
答案 0 :(得分:1)
您也可以尝试ddply
:
library(plyr)
ddply(df, .(trt, field), summarize,
pA = sum(patternA == "T")/length(patternA),
pB = sum(patternB == "T")/length(patternA))
# trt field pA pB
# 1 X A 0.5 0.5
# 2 X B 1.0 1.0
# 3 Y A 0.0 1.0
# 4 Y B 0.5 1.0
另请注意,矩阵的组件应具有相同的模式。因此,当您将数字比例与字段&#39; field&#39;一起放入矩阵时,您的数字比例将被强制转换为字符。在这里,我创建了一个数据框,其中每列可以是不同的模式。