【问题标题】:Subset a dataset to only groups with 2 or more unique subgroups in R [duplicate]将数据集子集为仅在 R 中具有 2 个或更多唯一子组的组 [重复]
【发布时间】:2017-11-11 01:35:12
【问题描述】:

我有一个数据集,我想仅将其子集划分为组中的子组具有 2 个或更多独特类别的观察结果,(我正在尝试对居住在跨越州界的 Nielsen DMA 的调查中的受访者进行子集。)

所以如果我有这个数据框:

start <- data.frame("obs"=seq(1,10, by=1),"grp"=c(rep("A",4), rep("B",3),rep("C",3)), "sub_grp"=c(rep("A1",2), rep("A2",2), rep("B1",3), "C1","C2","C3"))

我需要什么命令将其子集化?

end <- data.frame("obs"=c(seq(1,4,by=1), seq(8,10, by=1)), "grp"=c(rep("A",4), rep("C",3)), "sub_grp"=c("A1","A1","A2","A2","C1","C2","C3"))

数据集都是 data.tables,所以我认为该包中必须有一个特殊的命令来执行此操作。

感谢您的帮助!

【问题讨论】:

    标签: r data.table subset


    【解决方案1】:

    使用data.table,您可以使用uniqueN检查sub_grp中唯一值的数量,如果大于1,则保留.SD的组:

    setDT(start)[, if(uniqueN(sub_grp) > 1) .SD, grp]
    
    #   grp obs sub_grp
    #1:   A   1      A1
    #2:   A   2      A1
    #3:   A   3      A2
    #4:   A   4      A2
    #5:   C   8      C1
    #6:   C   9      C2
    #7:   C  10      C3
    

    【讨论】:

      【解决方案2】:

      您可以使用dplyr 库:

      library(dplyr)
      
      start %>% 
        group_by(grp) %>%
        filter(length(unique(sub_grp)) >= 2) %>% 
        ungroup
      

      这会给你结果:

      # A tibble: 7 x 3
          obs   grp sub_grp
        <dbl> <chr>   <chr>
      1     1     A      A1
      2     2     A      A1
      3     3     A      A2
      4     4     A      A2
      5     8     C      C1
      6     9     C      C2
      7    10     C      C3
      

      【讨论】:

        猜你喜欢
        • 2023-03-28
        • 1970-01-01
        • 1970-01-01
        • 2018-07-18
        • 2014-11-16
        • 2015-03-19
        • 1970-01-01
        • 1970-01-01
        • 2017-04-27
        相关资源
        最近更新 更多