Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过匹配两行合并不相等的数据帧用0替换R中缺少的值_R_Dataframe_Merge - Fatal编程技术网

通过匹配两行合并不相等的数据帧用0替换R中缺少的值

通过匹配两行合并不相等的数据帧用0替换R中缺少的值,r,dataframe,merge,R,Dataframe,Merge,我想通过匹配两列合并两个不相等的数据帧并用0替换缺少的值来创建一个新的数据帧。 以下是我拥有的两个数据帧示例: df1 ID YEAR INTERVIEW ID_HOUSEHOLD 1 2017 300 1 2018 300 1 2019 300 2 2017 150 2 2018 150 2 2019 150 3 2017

我想通过匹配两列合并两个不相等的数据帧并用0替换缺少的值来创建一个新的数据帧。 以下是我拥有的两个数据帧示例:

df1
ID YEAR INTERVIEW  ID_HOUSEHOLD
1    2017           300
1    2018           300
1    2019           300
2    2017           150
2    2018           150
2    2019           150
3    2017           420
3    2018           420

df2
ID YEAR INTERVIEW  YEARS_EDU
1    2017           10
1    2018           10
1    2019           10
3    2017           3
3    2018           3
*请注意,在第二个数据帧中,我没有个人2的信息 我希望获得以下数据帧:

df3
df1
ID YEAR INTERVIEW  ID_HOUSEHOLD  YEARS_EDU
1    2017           300           10
1    2018           300           10
1    2019           300           10
2    2017           150           0
2    2018           150           0
2    2019           150           0
3    2017           420           3
3    2018           420           3
我正在努力:

df3<-merge(df1,df2, by="ID", all=TRUE)
df3<-merge(df1,df2, by="ID","YEAR_INTERVIEW", all=TRUE)

df3by
需要是一个
向量
,即我们可以用
c()创建一个向量。另外,
all=TRUE
是一个完全联接,但在这里,它应该是一个左联接,因此它是
all.x=TRUE
。如果没有匹配项,则默认情况下元素将为
NA

out <- merge(df1,df2, by=c("ID","YEAR_INTERVIEW"), all.x=TRUE)
-输出

out
#  ID YEAR_INTERVIEW ID_HOUSEHOLD YEARS_EDU
#1  1           2017          300        10
#2  1           2018          300        10
#3  1           2019          300        10
#4  2           2017          150         0
#5  2           2018          150         0
#6  2           2019          150         0
#7  3           2017          420         3
#8  3           2018          420         3
数据
df1
out
#  ID YEAR_INTERVIEW ID_HOUSEHOLD YEARS_EDU
#1  1           2017          300        10
#2  1           2018          300        10
#3  1           2019          300        10
#4  2           2017          150         0
#5  2           2018          150         0
#6  2           2019          150         0
#7  3           2017          420         3
#8  3           2018          420         3
df1 <- structure(list(ID = c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L), 
 YEAR_INTERVIEW = c(2017L, 
2018L, 2019L, 2017L, 2018L, 2019L, 2017L, 2018L), ID_HOUSEHOLD = c(300L, 
300L, 300L, 150L, 150L, 150L, 420L, 420L)), class = "data.frame",
row.names = c(NA, 
-8L))


df2 <- structure(list(ID = c(1L, 1L, 1L, 3L, 3L), 
YEAR_INTERVIEW = c(2017L, 
2018L, 2019L, 2017L, 2018L), YEARS_EDU = c(10L, 10L, 10L, 3L, 
3L)), class = "data.frame", row.names = c(NA, -5L))