【问题标题】:Select rows that have the same group in two years选择两年内具有相同组的行
【发布时间】:2019-08-06 20:47:56
【问题描述】:

我有一个样本数据集如下:

df <- data.frame(Group = c("a", "d", "a", "b", "b", "c", "c", "c", "c"), 
                 Year = c("1991", '1992', '1993', '1991', '1992', '1991', '1992','1993','1994'), 
                 value = 1:9)

我想选择与 1991 具有相同分组的行。例如分组是 1991 的 a、b、c 和 1992 的 d、b、c;因此,在 1992 年选择了 b 组和 c 组。1993 年的组是 a 和 c;因此,在 1993 年只选择了 a 和 c。结果输出是这个

Group   Year
a   1991
b   1991
c   1991
b   1992
c   1992
a   1993
c   1993

这是我尝试过的:

df2 <- df %>% group_by(Group, Year) %>% 
  mutate(total = n()) %>% 
  filter(total == 3)

我可以将 total == 3 更改为 total==2,但无论如何,它都会过滤观察结果,以便每年都有相同的组,而我只想将选择标准基于 1991 年。

【问题讨论】:

    标签: r dataframe dplyr


    【解决方案1】:

    这是dplyr的一种方式-

    df %>% 
      arrange(Year, Group) %>% # not necessary but nice to have I think
      filter(Group %in% Group[Year == 1991])
    
      Group Year value
    1     a 1991     1
    2     b 1991     4
    3     c 1991     6
    4     b 1992     5
    5     c 1992     7
    6     a 1993     3
    7     c 1993     8
    8     c 1994     9
    

    【讨论】:

      【解决方案2】:

      我并不完全清楚您想要的输出是什么,但我更喜欢稍后可以附加在一起的数据框列表。

      注意这可能超出了您的需要,因为其他答案只是根据 Year 列子集中的值过滤行。 1

      library(data.table)
      
      lapply(split.data.frame(df, df$Year), 
             function(x) na.omit(setDT(x)[setDT(df[df$Year=='1991',]), , 
                           on=.(Group)]))
      
      # $`1991`
      #    Group Year value i.Year i.value
      # 1:     a 1991     1   1991       1
      # 2:     b 1991     4   1991       4
      # 3:     c 1991     6   1991       6
      #  
      # $`1992`
      #    Group Year value i.Year i.value
      # 1:     b 1992     5   1991       4
      # 2:     c 1992     7   1991       6
      #  
      # $`1993`
      #    Group Year value i.Year i.value
      # 1:     a 1993     3   1991       1
      # 2:     c 1993     8   1991       6
      #  
      # $`1994`
      #    Group Year value i.Year i.value
      # 1:     c 1994     9   1991       6
      

      【讨论】:

        猜你喜欢
        • 2014-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-03
        • 2021-10-21
        • 2013-11-10
        • 2023-02-15
        • 2018-07-09
        相关资源
        最近更新 更多