我有这张桌子。
'data.frame': 5303 obs. of 9 variables:
$ Metric.ID : num 7156 7220 7220 7220 7220 ...
$ Metric.Name : Factor w/ 99 levels "Avoid accessing data by using the position and length",..: 51 59 59
$ Technical.Criterion: Factor w/ 25 levels "Architecture - Multi-Layers and Data Access",..: 4 9 9 9 9 9 9 9 9 9 ...
$ RT.Snapshot.name : Factor w/ 1 level "2017_RT12": 1 1 1 1 1 1 1 1 1 1 ...
$ Violation.status : Factor w/ 2 levels "Added","Deleted": 2 1 2 2 2 1 1 1 1 1 ...
$ Critical.Y.N : num 0 0 0 0 0 0 0 0 0 0 ...
$ Grouping : Factor w/ 29 levels "281","Bes",..: 27 6 6 6 6 7 7 7 7 7 ...
$ Object.type : Factor w/ 11 levels "Cobol Program",..: 8 7 7 7 7 7 7 7 7 7 ...
$ Object.name : Factor w/ 3771 levels "[S:\\SOURCES\\",..: 3771 3770 3769 3768 3767 3
我希望得到这样的统计输出: 对于每个Technical.Criterion,一行具有Critical.Y.N = 0和1
的所有行的总和所以我必须将数据库的行组合成一个新的矩阵。使用因子的值和...
但我不知道如何开始......?任何提示?
由于
答案 0 :(得分:0)
我相信你要求交叉制表。因为您没有提供可重复的样本,所以我使用了我的:
xtabs(~ Sub.Category + Category, retail)
如果您希望根据Sales而不是计数来说明该值,那么您可以将代码修改为:
xtabs(Sales ~ Sub.Category + Category, retail)
根据OP评论中的额外信息进行编辑
如果您希望表格也共享一个共同的标题,并希望更改该标题的名称,则可以使用names()
和dimnames()
的组合。 xtab
是交叉制表表,如果您在其上调用dimnames()
,则返回长度为2的列表,第一个对应于行,第二个对应于列。
dimnames(xtab(dat))
$Technical.Criterion
[1] "TechnicalCrit1" "TechnicalCrit2" "TechnicalCrit3"
$`Object.type`
[1] "Object.type1" "Object.type2" "Object.type3"
给定一个数据框b
:
'data.frame': 3 obs. of 9 variables:
$ Metric.ID : int 101 102 103
$ Metric.Name : Factor w/ 3 levels "A","B","C": 1 2 3
$ Technical.Criterion: Factor w/ 3 levels "TechnicalCrit1",..: 1 2 3
$ RT.Snapshot.name : Factor w/ 3 levels "A","B","C": 1 2 3
$ Violation.status : Factor w/ 2 levels "Added","Deleted": 1 2 1
$ Critical.Y.N : num 1 0 1
$ Grouping : Factor w/ 3 levels "A","B","C": 1 2 3
$ Object.type : Factor w/ 3 levels "Object.type1",..: 1 2 3
$ Object.name : Factor w/ 3 levels "A","B","C": 1 2 3
我们可以使用xtab
,然后更改"常用"标题就在我们桌子的顶部。由于我不知道b$Violation.status
中有多少级别,我会使用泛型for循环:
for(i in 1:length(unique(b$Violation.status))){
tab[[i]] <- xtabs(Critical.Y.N ~ Technical.Criterion + Object.type, b)
names(dimnames(tab[[i]]))[2] <- paste("Violation.status", i)
}
这会产生:
Violation.status 1
Technical.Criterion Object.type1 Object.type2 Object.type3
TechnicalCrit1 1 0 0
TechnicalCrit2 0 0 0
TechnicalCrit3 0 0 1
我现在可以在我的闪亮应用中使用它。