每个类别最常出现两个值?

时间:2017-07-24 15:28:51

标签: r

我有一个包含3列的数据框:ID号,类别和品牌:

X1             X2               X3
1234           Accessories     A89
1234           Accessories     A87
1234           Accessories     A87
1234           Sides           A32
1234           Sides           A27
1234           Sides           A27
1235           Tops            A12
1235           Tops            A14
1235           Tops            A14
1236           Sides           A32
1236           Sides           A27

我有150个不同的类别和1700个不同的品牌。

我想找到最常聚集的每个类别的两个品牌:

  X2             X1
Accessories       A89, A87
Sides             A32, A27
Tops              A12, A14

或:

#$Accessories
    #[1] "A89" "A87"

#$Sides
    #[1] "A32" "A27"

#$Tops
    #[1] "A12" "A14" 

我能想到的唯一方法是将数据框重做如下:

     A89   A87   A32   A27   A12   A14  
1    1     2     1     2     0     0
2    0     0     0     0     1     2
3    0     0     1     1     0     0

然后在使用大于0的值填充某个列时,返回填充了大于0的值的列。

list1 =(setNames(object = lapply(1:NCOL(df), function(i)
  unique(colnames(df)[-i][which(as.matrix(df[which(df[,i] > 0), -i])>0,
                                       arr.ind = TRUE)[,2]])),
  nm = colnames(df)))

然后我牺牲了我需要的类别。 关于如何解决这个问题的任何想法?

1 个答案:

答案 0 :(得分:1)

我们可以使用data.table。将'data.frame'转换为'data.table'(setDT(df1),按'X2','X3'分组,我们获取行数(.N),然后按'X2'分组order已转换为'X3'和'N',我们得到'{1}}值为'X3',factor为前两个元素。

unique

数据

paste