2016-06-10 67 views
1

我有一个大的数据集,看起来像类似于此,如何从R中的多列分组频率绘制箱形图?

StudentID SectorID ClassID 
1   A Team_1 Class_1 
2   A Team_1 Class_1 
3   B Team_1 Class_1 
4   B Team_2 Class_1 
5   B Team_2 Class_1 
6   A Team_2 Class_1 
7   A Team_3 Class_1 
8   C Team_3 Class_2 
9   C Team_3 Class_2 
10   C Team_3 Class_2 
11   C Team_3 Class_2 
12   C Team_1 Class_2 
13   D Team_1 Class_2 
14   D Team_1 Class_2 

这可以通过产生,

stg <- data.frame(StudentID = c(rep("A", 2), rep("B", 3), rep("A", 2), rep("C", 5), rep("D", 2) ), 
        SectorID = c(rep("Team_1", 3), rep("Team_2", 3), rep("Team_3", 5), rep("Team_1", 3)),    
        ClassID  = c(rep("Class_1", 7), rep("Class_2", 7))    
) 

然后,设法找到每个扇区,然后类别分组StudentID的频率。

stg.a <- aggregate(stg$StudentID, by = list(SectorID = stg$SectorID, ClassID = stg$ClassID), count) 

但是,这里计数返回某种复杂的列表。如果你检查stg.a,你会奇怪或显然误导输出。所以,我它转换为一个矩阵,

stg.a.f <- as.data.frame(as.matrix(stg.a)) 

和看起来像这样,

SectorID ClassID x.x x.freq 
1 Team_1 Class_1 1, 2 2, 1 
2 Team_2 Class_1 1, 2 1, 2 
3 Team_3 Class_1 1  1 
4 Team_1 Class_2 3, 4 1, 2 
5 Team_3 Class_2 3  4 

第一行读取, 在TEAM_1,在Class_1学生编号1(ID:A),出现了2次, 学生号码2(ID:B),出现1次。我想要看到频率(如果可能的话,根据Student_ID(xx)以颜色分开),然后按照某些因素进行分组(例如,队,类)

回答

0

我看到试图找到频率复杂没有预期的结果。我建议通过查找组合项目并记录它们的频率来创建一个简单的数据框架。这可以使用table功能如下完成:

stg.a <- as.data.frame(table(stg$StudentID, stg$SectorID, stg$ClassID)) 
names(stg.a)<-c(colnames(stg), 'Freq') 

有可能的组合与零值。根据所需的分析,您可能会也可能没有价值来保存或从集中删除它们。如果删除零值是最好的选择,那么运行命令

stg.a<-stg.a[which(stg.a$Freq>0),] 

这应该提供一个更容易的平台来建立你的图。

让我知道你是否需要帮助与情节。我会要求比OP更清楚你想要展示什么以及如何展示。

+0

1)感谢您的时间百万@sfyn。你的帮助当然可以解决我试图解决的基本问题。但是,在这个解决方案中,我无法应用(还)方面来显示不同的分组。 <<仍然我正在尝试 2)在我之前解决问题的方法中:它包含数据中的StudentID信息,可能使我们有可能根据StudentID为每个点着色。我想,这很有趣。 “我像前面那样打墙。 –