R:迭代列和绘图

时间:2014-05-23 18:31:48

标签: r

我的数据如下:

  Group Feature_A Feature_B Feature_C Feature_D
1     1         0         3         2         4
2     1         5         2         2         8
3     1         9         8         6         5
4     2         5         7         8         8
5     2         2         6         8         1
6     2         3         8         6         4
7     3         1         5         3         5
8     3         1         4         3         4

df <- structure(list(Group = c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L), Feature_A = c(0L, 
5L, 9L, 5L, 2L, 3L, 1L, 1L), Feature_B = c(3L, 2L, 8L, 7L, 6L, 
8L, 5L, 4L), Feature_C = c(2L, 2L, 6L, 8L, 8L, 6L, 3L, 3L), Feature_D = c(4L, 
8L, 5L, 8L, 1L, 4L, 5L, 4L)), .Names = c("Group", "Feature_A", 
"Feature_B", "Feature_C", "Feature_D"), class = "data.frame", row.names = c(NA, 
-8L))

对于每个Feature,我想生成一个图表(例如,boxplot),它会在Groups之间产生明显差异。

# Get unique Feature and Group
Features<-unique(colnames(df[,-1]))
Group<-unique(colnames(df$Group))

但我该怎么办呢? 伪代码可能如下所示:

  • 从数据
  • 中选择Feature
  • 根据Group
  • 拆分数据
  • Boxplot

    for (i in 1:levels(df$Features)){  
       for (o in 1:length(Group)){
    }}
    

我怎样才能做到这一点?希望有人可以帮助我。

2 个答案:

答案 0 :(得分:2)

我会把py数据放在长格式中。然后使用ggplot2你可以做一些不错的事情。

library(reshape2)
library(ggplot2)
library(gridExtra)
## long format using Group as id 
dat.m <- melt(dat,id='Group')
## bar plot 
p1 <- ggplot(dat.m) +
  geom_bar(aes(x=Group,y=value,fill=variable),stat='identity')
## box plot 
p2 <- ggplot(dat.m) +
  geom_boxplot(aes(x=factor(Group),y=value,fill=variable))
## aggregate the 2 plots
grid.arrange(p1,p2)

enter image description here

答案 1 :(得分:1)

这很容易做到。我一直这样做

下面的代码将使用ggplot生成图表并将其保存为ch_Feature_A ....

您可以将答案包装在pdf语句中,以便将它们发送到pdf

library(ggplot2)
df$Group <- as.factor(df$Group)
for (i in 2:dim(df)[2]) {
  ch <- ggplot(df,aes_string(x="Group",y=names(df)[i],fill="Group"))+geom_boxplot()
  assign(paste0("ch_",names(df)[i]),ch)
}

甚至更简单,如果你不想要单独的图表

library(reshape2)
df1 <- melt(df)
ggplot(df1,aes(x=Group,y=value,fill=Group))+geom_boxplot()+facet_grid(.~variable)

enter image description here