我有一个名为mylist的数据框列表。列表的标题是人的名字,数据框包含与这些名称相关的数据的列(日期,高度,重量等)
names(mylist[1])
[1] "John"
names(mylist[2])
[1] "Susan"
mylist[[1]]
[1] name date hight weight ....
John 1950 1.81 78
John 1948 1.60 60
John 1935 1.50 55
mylist[[2]]
[1] name date hight weight ....
Susan 1985 1.40 40 .
Susan 1995 1.45 60
Susan 1990 1.25 40
我想为每个指标创建一个箱线图:一个用于高度的箱图,一个用于重量等。我想在每个度量标准的箱图中包含所有人的信息。例如,我想要一个包含John,Susan等信息的高度盒子图。
这是我对循环的尝试,但它不起作用。
for(s in 3:21) {
boxplot(x=for(i in 1:99){ mylist[[i]][s]}))
}
大家好,我申请了nograpes解决方案。虽然,他建议的代码:
ggplot(melted.df,aes(x=name,y=value)) +
geom_boxplot() + facet_grid(variable~.,scales='free')
将每个箱形图堆叠在彼此之上,最后情节是不可读的,因为有16个箱图。因此,一个好主意是创建16个不同的箱图,每个度量标准一个。
我一直在寻找解决方案,一个是运行此代码:
tomelt<-data.frame(c(daily[1],daily[2],daily[3])) #create a data.frame with variable name, date and the variable to be ploted.
melted.df<-melt(tomelt,id.vars=c('name', 'date')) #convert to long form
ggplot(melted.df,aes(x=name,y=value)) + geom_boxplot() #plot
16次,每次更改代码以调用数据框的另一个度量标准(列)...但显然这根本没有效率。
您是否知道如何创建for循环来执行此操作?
答案 0 :(得分:0)
这里有很多你似乎缺少的东西。首先,如果您有16个指标和50,000个观测值,每人10个观测值,您将获得80,000个箱图。也许你只对前几个人感兴趣。
您需要了解很多关于for
循环的知识。你一定要找一本关于R的指南,先尝试一些基本的东西。
使用for循环,我认为你打算做这样的事情:
for(s in 3:ncol(mylist[[1]])) {
for(i in 1:length(mylist)){
boxplot(mylist[[i]][s])
}
}
但即使这样也行不通,每个情节都会覆盖最后一个,所以你必须把它放到一个par(mfrow=c(num.rows,num.cols))
的网格中。但是有更好的选择。你应该看?boxplot
,特别是例子;有很多例子适用于你的情况。另外,请考虑ggplot2
。例如,尝试使用此代码,它将在没有for循环的情况下以行和列整齐地绘制数据。
# Stick your list together.
one.df<-do.call(rbind,mylist)
# Convert to "long-form".
library(reshape)
melted.df<-melt(one.df,id.vars=c('name','date'))
# Plot with ggplot2
ggplot(melted.df,aes(x=name,y=value)) +
geom_boxplot() + facet_grid(variable~.,scales='free')
答案 1 :(得分:0)
我最近这样做了。我有一个数据框,我想将第3列到第10列作为y轴放在8个箱形图中的每一个对着第1列.df称为&#34;事件&#34;。 你必须每次使用相同的colnames创建一个新的数据框(&#34; boxdf&#34;),这是蹩脚的,但它可以工作:
for (g in 3:ncol(Event))
{
SaveBox = paste0("boxplot_",colnames(Event[g]),"_",g,".png")
boxdf <- data.frame(Event$event_type,Event[g])
colnames(boxdf) = c("event_type","ycol")
boxplot(ycol~event_type,data=boxdf, main = colnames(Event[g]), xlab="type: 0:non-event, 1:event", ylab=colnames(Event[g]),col=c("blue","red")) #Event[g]
dev.copy(png,SaveBox)
dev.off()
rm(boxdf)
}
哦,它还将每个箱图保存到当前目录中。 保存行是:
SaveBox = paste0("boxplot_",colnames(Event[g]),"_",g,".png")
...
dev.copy(png,SaveBox)
dev.off()