【问题标题】:Keep only "cluster" with the highest number of elements只保留元素数量最多的“集群”
【发布时间】:2016-08-12 16:07:49
【问题描述】:

从示例数据开始:

> dput(data)
structure(list(Country = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L), .Label = c("France", "Spain"), class = "factor"), 
    Car = structure(c(6L, 17L, 7L, 18L, 4L, 13L, 20L, 5L, 14L, 
    21L, 8L, 11L, 15L, 9L, 12L, 16L, 8L, 11L, 15L, 9L, 12L, 19L, 
    3L, 10L, 1L, 2L), .Label = c("Audi_1_EON", "Audi_2_EON", 
    "Ferrari_1_EOD", "Fiat_1_EOD", "Fiat_1_EON", "Mazda_1_EOD", 
    "Mazda_1_EON", "Mercedes_1_EOD", "Mercedes_1_EON", "Mercedes_2_EOD", 
    "Nexia_1_EOD", "Nexia_1_EON", "Opel_1_EOD", "Opel_1_EON", 
    "Peugeot_1_EOD", "Peugeot_1_EON", "Porsche_2_EOD", "Porsche_2_EON", 
    "Tico_1_EON", "VW_1_EOD", "VW_1_EON"), class = "factor"), 
    ValueOfComp = c(13L, 13L, 13L, 13L, 14L, 14L, 14L, 14L, 14L, 
    14L, 15L, 15L, 15L, 15L, 15L, 15L, 16L, 16L, 16L, 16L, 16L, 
    16L, 12L, 12L, 12L, 12L)), .Names = c("Country", "Car", "ValueOfComp"
), class = "data.frame", row.names = c(NA, -26L))

在呈现的data 中,第一列中有两个不同的国家。在下一列中,我们可以找到分配给每个国家/地区的汽车,最后一列是集群的数量。

我想在表格中只为每个国家/地区保留一个集群。它必须是每个国家最大的集群。让我们以法国为例。两个集群(1314)分配给这个国家。很明显,集群 14 包含更多元素/汽车。在这种情况下,我想保留集群 14 并从数据中删除集群 13。

提供的数据只是一个例子。我的真实数据是一张巨大的表格,所以我相信在某些情况下,集群可能会包含相同数量的元素,所以无论哪一个将保留数据并不重要。

【问题讨论】:

  • 如果有两个大小相等的集群会发生什么?两者都保留,还是随机选择一个?
  • 我在上一段提到过。随机选择。这对你来说太容易了:)。
  • 这是一种默认选择第一组的方法。

标签: r classification


【解决方案1】:
library(data.table)

data[ValueOfComp %in% setDT(data)[,rle(ValueOfComp), Country][
                                  ,values[which.max(lengths)], Country]$V1,]

    Country            Car ValueOfComp
 1:  France     Fiat_1_EOD          14
 2:  France     Opel_1_EOD          14
 3:  France       VW_1_EOD          14
 4:  France     Fiat_1_EON          14
 5:  France     Opel_1_EON          14
 6:  France       VW_1_EON          14
 7:   Spain Mercedes_1_EOD          15
 8:   Spain    Nexia_1_EOD          15
 9:   Spain  Peugeot_1_EOD          15
10:   Spain Mercedes_1_EON          15
11:   Spain    Nexia_1_EON          15
12:   Spain  Peugeot_1_EON          15

【讨论】:

    【解决方案2】:

    使用dplyr,您可以这样做:

    data %>% 
      group_by(Country, ValueOfComp) %>%
      mutate(size = n()) %>%
      group_by(Country) %>%
      filter(size == max(size), ValueOfComp == max(ValueOfComp))
    
    Source: local data frame [12 x 4]
    Groups: Country [2]
    
       Country            Car ValueOfComp  size
        (fctr)         (fctr)       (int) (int)
    1   France     Fiat_1_EOD          14     6
    2   France     Opel_1_EOD          14     6
    3   France       VW_1_EOD          14     6
    4   France     Fiat_1_EON          14     6
    5   France     Opel_1_EON          14     6
    6   France       VW_1_EON          14     6
    7    Spain Mercedes_1_EOD          16     6
    8    Spain    Nexia_1_EOD          16     6
    9    Spain  Peugeot_1_EOD          16     6
    10   Spain Mercedes_1_EON          16     6
    11   Spain    Nexia_1_EON          16     6
    12   Spain     Tico_1_EON          16     6
    

    【讨论】:

      【解决方案3】:

      我们可以使用plyr包和subset来获取,

      ddply(dat, "Country", subset, ValueOfComp == count(ValueOfComp)$x[which.max(count(ValueOfComp)$freq)])
      #   Country            Car ValueOfComp
      #1   France     Fiat_1_EOD          14
      #2   France     Opel_1_EOD          14
      #3   France       VW_1_EOD          14
      #4   France     Fiat_1_EON          14
      #5   France     Opel_1_EON          14
      #6   France       VW_1_EON          14
      #7    Spain Mercedes_1_EOD          15
      #8    Spain    Nexia_1_EOD          15
      #9    Spain  Peugeot_1_EOD          15
      #10   Spain Mercedes_1_EON          15
      #11   Spain    Nexia_1_EON          15
      #12   Spain  Peugeot_1_EON          15
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-06-21
        • 1970-01-01
        • 2013-07-17
        • 1970-01-01
        • 2020-08-26
        • 2015-01-15
        • 1970-01-01
        相关资源
        最近更新 更多