我有两个数据帧:df1
和df2
。它们都有四列;三个具有相同名称的ID
,Year
和Week
,以及一个彼此不同的。
>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
中的ID
和Year
的组合也存在于df2
中时,它才包含df1
中的行。Week
可能是相同的或不为那一行,但我不想把列Week
考虑在内。所以df1
中的第一行是1代表ID
, 2004代表Year
,这也出现在df2
中。df1
中第二行的ID
和Year
的组合也出现在df2
中,但Week
的值不同。
我知道如何做,如果它只取决于一个列:df3 <- subset(df1, ID %in% df2$ID)
有一个解决方案,当我没有列Week
这是:df3 <- df1 %>% inner_join(df2)
但是我不知道如何使它同时依赖于ID
和Year
,而没有它也考虑到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)