首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过匹配两行来合并不相等的数据帧用0替换R中的缺失值

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

Stack Overflow用户
提问于 2021-03-04 03:52:04
回答 1查看 47关注 0票数 1

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

代码语言:javascript
复制
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的信息,我希望获得以下数据帧:

代码语言:javascript
复制
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

我正在尝试:

代码语言:javascript
复制
df3<-merge(df1,df2, by="ID", all=TRUE)
df3<-merge(df1,df2, by="ID","YEAR_INTERVIEW", all=TRUE)

第一个选项通过多年的采访重复了数百次ID观察,而第二个选项给我的值为0。

如有任何帮助将不胜感激:)谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-04 03:54:40

by需要是一个vector,也就是说我们可以用c()创建一个向量。此外,all = TRUE是一个完全连接,但在这里,它应该是一个左连接,所以它是all.x = TRUE。如果没有匹配,则缺省情况下该元素将为NA

代码语言:javascript
复制
out <- merge(df1,df2, by=c("ID","YEAR_INTERVIEW"), all.x=TRUE)

NA%s可以转换为0

代码语言:javascript
复制
out$YEARS_EDU[is.na(out$YEARS_EDU)] <- 0

-output

代码语言:javascript
复制
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

数据

代码语言:javascript
复制
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))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66463971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档