使用因子

时间:2018-04-27 12:10:05

标签: 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: 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

的所有行的总和

enter image description here

所以我必须将数据库的行组合成一个新的矩阵。使用因子的值和...

但我不知道如何开始......?任何提示?

由于

1 个答案:

答案 0 :(得分:0)

我相信你要求交叉制表。因为您没有提供可重复的样本,所以我使用了我的:

xtabs(~ Sub.Category + Category, retail)

制作: enter image description here

如果您希望根据Sales而不是计数来说明该值,那么您可以将代码修改为:

xtabs(Sales ~ Sub.Category + Category, retail)

您将获得以下输出: enter image description here

根据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

我现在可以在我的闪亮应用中使用它。