我想要创建一个新的数据帧,通过匹配两列来合并两个不相等的数据帧,并用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)第一个选项通过多年的采访重复了数百次ID观察,而第二个选项给我的值为0。
如有任何帮助将不胜感激:)谢谢
发布于 2021-03-04 03:54:40
by需要是一个vector,也就是说我们可以用c()创建一个向量。此外,all = TRUE是一个完全连接,但在这里,它应该是一个左连接,所以它是all.x = TRUE。如果没有匹配,则缺省情况下该元素将为NA
out <- merge(df1,df2, by=c("ID","YEAR_INTERVIEW"), all.x=TRUE)NA%s可以转换为0
out$YEARS_EDU[is.na(out$YEARS_EDU)] <- 0-output
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))https://stackoverflow.com/questions/66463971
复制相似问题