r语言 - 根据另一个数据帧的值对一个数据帧中的行进行子集



我有两个数据帧:df1df2。它们都有四列;三个具有相同名称的ID,YearWeek,以及一个彼此不同的。

>df1
ID      Year      Oxygen     Week
----    ------    -------    -------
1       2004      18          1
1       2005      17          1 
2       2006      17          1
2       2007      18          1 
3       2008      19          1
3       2010      20          1
3       2010      20          1
4       2012      16          1
5       2013      18          1
6       2014      18          1
>df2
ID      Year      Kg       Week
----    ------   -----    -------
1       2004      20        1
1       2005      35        2
2       2006      30        2
3       2007      15        1
3       2008      70        2
4       2009      40        1
5       2013      55        1
6       2012      40        1
6       2014      10        2
7       2013      15        1

我想生成一个新的数据帧,只有当df1中的IDYear的组合也存在于df2中时,它才包含df1中的行。Week可能是相同的或不为那一行,但我不想把列Week考虑在内。所以df1中的第一行是1代表ID, 2004代表Year,这也出现在df2中。df1中第二行的IDYear的组合也出现在df2中,但Week的值不同。

我知道如何做,如果它只取决于一个列:df3 <- subset(df1, ID %in% df2$ID)

有一个解决方案,当我没有列Week这是:df3 <- df1 %>% inner_join(df2)

但是我不知道如何使它同时依赖于IDYear,而没有它也考虑到Week

我应该以以下数据帧结束,它只包含df1中的列:

>df3
ID      Year      Oxygen      Week
----    ------    -------    -------
1       2004      18          1
1       2005      17          1
2       2006      17          1
3       2008      19          1
4       2012      16          1
5       2013      18          1
6       2014      18          1

tidyverse方法

library(dplyr)
df3 <-
df1 %>% 
inner_join(df2)

最新更新