如何从一个data.frame中获取数据并将其放入R中具有多个条件的另一个data.frame中

如何从一个data.frame中获取数据并将其放入R中具有多个条件的另一个data.frame中,r,dataframe,data-structures,conditional-statements,R,Dataframe,Data Structures,Conditional Statements,我有一点问题想弄明白怎么做。我有两个data.frame,我想将变量带到一个date.frame,并在一定条件下将其添加到另一个date.frame。下面是我的两个data.frame的摘录: 数据框1: ID YEAR_F 154 2005 432 2005 123 2007 数据框2: ID Year_D Month DC1 DC2 154 2001 1 4 23 154 2001 2

我有一点问题想弄明白怎么做。我有两个data.frame,我想将变量带到一个date.frame,并在一定条件下将其添加到另一个date.frame。下面是我的两个data.frame的摘录:

数据框1:

ID    YEAR_F
154   2005
432   2005
123   2007
数据框2:

ID   Year_D    Month    DC1    DC2

154   2001       1       4      23
154   2001       2       56     22
154   2005       1       32     11 
154   2005       2       12     10
432   2005       1       23     11 
432   2006       1       23     10 
432   2006       2       22     11
123   2001       1       12     34
123   2007       1       11     12
123   2007       2       11     11 
123   2004       1       43     43
所以我想获取第二个data.frame的DC1和DC2,并将其添加到我的第一个data.frame中。但是,我希望它根据第一个data.frame的年份来做。另外,我希望每月有一列DC1和DC2。最后,我的data.frame看起来是这样的:

数据框3:

ID   Year_D   DC1_M1   DC1_M2     DC2_M1    DC2_M2

154   2005     32         12        11         10
432   2005     23         na        11         na
123   2007     11         11        12         11
我真的不知道怎么做?特别是因为第二个data.frame的结构发生了变化


提前谢谢你

我们可以在根据第一个数据的“年份”筛选后,将第二个数据集转换为“宽”格式,然后进行联接

library(dplyr)
library(tidyr)
df2 %>% 
  filter(Year_D %in% df1$YEAR_F) %>% 
  select(-Year_D) %>%
  pivot_wider(names_from = Month, values_from = c(DC1, DC2)) %>% 
  right_join(df1) %>%
  select(names(df1), everything())
-输出

# A tibble: 3 x 6
#     ID YEAR_F DC1_1 DC1_2 DC2_1 DC2_2
#  <int>  <int> <int> <int> <int> <int>
#1   154   2005    32    12    11    10
#2   432   2005    23    NA    11    NA
#3   123   2007    11    11    12    11
数据
df1感谢您的工作,一切顺利!
merge(df1, reshape(subset(df2, Year_D %in% df1$YEAR_F, select = -Year_D), 
       idvar = 'ID', direction = 'wide', timevar = 'Month'))
#   ID YEAR_F DC1.1 DC2.1 DC1.2 DC2.2
#1 123   2007    11    12    11    11
#2 154   2005    32    11    12    10
#3 432   2005    23    11    NA    NA
df1 <- structure(list(ID = c(154L, 432L, 123L), YEAR_F = c(2005L, 2005L, 
2007L)), class = "data.frame", row.names = c(NA, -3L))

df2 <- structure(list(ID = c(154L, 154L, 154L, 154L, 432L, 432L, 432L, 
123L, 123L, 123L, 123L), Year_D = c(2001L, 2001L, 2005L, 2005L, 
2005L, 2006L, 2006L, 2001L, 2007L, 2007L, 2004L), Month = c(1L, 
2L, 1L, 2L, 1L, 1L, 2L, 1L, 1L, 2L, 1L), DC1 = c(4L, 56L, 32L, 
12L, 23L, 23L, 22L, 12L, 11L, 11L, 43L), DC2 = c(23L, 22L, 11L, 
10L, 11L, 10L, 11L, 34L, 12L, 11L, 43L)), class = "data.frame", 
row.names = c(NA, 
-11L))