R 带因子的数据帧复计数
我有这张桌子R 带因子的数据帧复计数,r,shiny,R,Shiny,我有这张桌子 '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: Fact
'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
我想要一个这样的统计输出:
对于每个技术标准,都有一行,其中所有行的总和为临界.Y.N=0和1
因此,我必须将数据库中的行合并到一个新的矩阵中。使用因子和的值
但我不知道如何开始。。。?有什么提示吗
谢谢我想你要求的是交叉列表。因为您没有提供可复制的样品,所以我使用了我的:
xtabs(~ Sub.Category + Category, retail)
制作:
如果希望值是基于销售额而不是计数,则可以将代码修改为:
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
,然后更改表格顶部的“common”标题。由于我不知道有多少级别处于b$违例状态
,因此我将使用通用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)
}
我现在可以在我闪亮的应用程序中使用它 请用
dput
和预期输出显示一个小的可复制示例。请查看我的“最终表格样本”。它显示了计算总和的项目组合。我需要25行用于所有“技术标准”。每个“违例.状态”下的列有11个“Object.Type”。因此,我的第一个总和(17)是:计算我的数据帧的所有行,其中“技术标准”是第一行(“架构-多层…”),“违例.状态”是第一行(“添加”),而“对象类型”是第一行(“Cobol程序”)。最后,所有5303行都必须在该表中进行计算。问题是我有一个包含因子的数据库。我需要25行的所有“技术标准”。每个“违例.状态”下的列有11个“Object.Type”。因此,我的第一个总和(17)是:计算我的数据帧的所有行,其中“技术标准”是第一行(“架构-多层…”),“违例.状态”是第一行(“添加”),而“对象类型”是第一行(“Cobol程序”)。最后,所有5303行都必须在该表中计算。@Talcom扩展了我的答案以帮助您。谢谢您的提示。我是个新手,一切对我来说都是新的。我收到一个错误“找不到对象”选项卡。只有两个级别处于冲突状态。状态
Violation.status 1
Technical.Criterion Object.type1 Object.type2 Object.type3
TechnicalCrit1 1 0 0
TechnicalCrit2 0 0 0
TechnicalCrit3 0 0 1