如何从一个data.frame中获取数据并将其放入R中具有多个条件的另一个data.frame中
我有一点问题想弄明白怎么做。我有两个data.frame,我想将变量带到一个date.frame,并在一定条件下将其添加到另一个date.frame。下面是我的两个data.frame的摘录: 数据框1:如何从一个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
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))