我问的问题可能是之前提出过的。但是,我无法找到可以根据我的数据调整的答案。
我的数据示例:
State V1 V2 V3
2 0.00000 0.0000 12.2661
4 0.00000 0.0000 21.3610
3 2.15633 0.0000 0.0000
3 28.07880 33.0049 30.7882
2 0.00000 0.0000 0.0000
6 0.00000 7.3000 33.6100
2 1.00000 0.0000 10.2503
4 0.00000 5.0000 56.3410
3 2.15633 0.0000 0.0000
6 8.07880 43.0049 15.8002
2 0.40000 0.0000 0.0000
2 0.00000 0.0000 23.1000
我想:对于每个State
(2,3,4,6),每Variable
(V1,V2,V3)进行绘图。
我能够想要使用此代码:
s2 <- subset(df, State == 2)
s3 <- subset(df, State == 3)
s4 <- subset(df, State == 4)
s6 <- subset(df, State == 6)
jpeg('rplot_V1.jpg')
boxplot(s2$V1,s3$V1,s4$V1,s6$V1)
dev.off()
jpeg('rplot_V2.jpg')
boxplot(s2$V2,s3$V2,s4$V2,s6$V2)
dev.off()
jpeg('rplot_V3.jpg')
boxplot(s2$V3,s3$V3,s4$V3,s6$V3)
dev.off()
当数据帧大10倍时,这种解决方案很笨拙 我的问题:如何循环数据框并打印?
答案 0 :(得分:1)
我认为这就是你的目标
states <- unique(test$State) #if your data.frame is called `test`
for(i in 1:length(states)){
boxplot(test[test$State == states[i],2:4])
}
OP评论后编辑
如果要绘制状态1,2和&gt; = 3,可以通过临时创建另一个data.frame(tmp)并操纵State值来轻松完成。然后你可以使用与上述相同的循环。
tmp <- test
tmp$State[tmp$State >= 3] <- 3
states <- unique(tmp$State)
for(i in 1:length(states)){
boxplot(test[test$State == states[i],2:4])
}
答案 1 :(得分:1)
试试这个:
#dummy data
df <- read.table(text="State V1 V2 V3
2 0.00000 0.0000 12.2661
4 0.00000 0.0000 21.3610
3 2.15633 0.0000 0.0000
3 28.07880 33.0049 30.7882
2 0.00000 0.0000 0.0000
6 0.00000 7.3000 33.6100
2 1.00000 0.0000 10.2503
4 0.00000 5.0000 56.3410
3 2.15633 0.0000 0.0000
6 8.07880 43.0049 15.8002
2 0.40000 0.0000 0.0000
2 0.00000 0.0000 23.1000", header=TRUE,as.is=TRUE)
#plot boxplot
lapply(2:ncol(df),function(i){
jpeg(paste0(paste("State",colnames(df)[i],sep="~"),".jpeg"))
boxplot(df[,i]~df$State,
ylab="State",
xlab=colnames(df)[i],
main=paste("State",colnames(df)[i],sep="~"))
dev.off()
})