选择两年内具有相同组的行

时间:2019-08-06 20:47:56

标签: r

我有一个示例数据集,如下所示:

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年进行选择。

3 个答案:

答案 0 :(得分:2)

这里是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

答案 1 :(得分:0)

df[df$Group %in% df$Group[df$Year == 1991],],您就完成了:)

答案 2 :(得分:0)

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

N.B。这可能超出了您的需要,因为其他答案只是根据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