r - 如何使用在 r 中重复的另一个数据框中的特定列更新数据框中的新列?
问题描述
大家好我的df1看起来像
MNO DOB
123 NA
123 NA
234 NA
234 NA
345 NA
456 NA
456 NA
我的df2有
MNO DOB
123 22-04-1996
234 16-06-1994
345 05-05-1990
456 18-08-2000
我使用合并来获得结果,使用 df3 <- merge(df1,df2,by.x = "MNO",all.x = TRUE)
我得到的输出看起来像
MNO DOB
123 22-04-1996
123 NA
234 16-06-1994
234 NA
345 05-05-1990
456 18-08-2000
456 NA
预期成绩 :
MNO DOB
123 22-04-1996
123 22-04-1996
234 16-06-1994
234 16-06-1994
345 05-05-1990
456 18-08-2000
456 18-08-2000
解决方案
根据显示的示例,列应由同一列“MNO”合并,因此我们可以使用by
而不是by.x
merge(df1[1], df2, by = "MNO", all.x = TRUE)
# MNO DOB
#1 123 22-04-1996
#2 123 22-04-1996
#3 234 16-06-1994
#4 234 16-06-1994
#5 345 05-05-1990
#6 456 18-08-2000
#7 456 18-08-2000
如果 'df3' 的输出基于不同的代码,那么在这merge
一步之后,我们可以fill
使用tidyr
之前的非 NA 填充 NA 元素
library(tidyr)
library(dplyr)
df3 <- df3 %>%
fill(DOB)
推荐阅读
- java - 抛出和捕获多个异常
- javascript - 如何使用 jquery 将所有值加入或推送到每个循环内的单个变量中
- html - 如何为 flex: 0 0 25% 的弹性项目添加 1px 边距?
- html - 在 Angular 6 中导航菜单时显示和隐藏内容
- c++ - 在 C++ 中获取两个大 int 并将它们存储在数组中
- php - 显示错误未更新数据库中的值
- python - Matplotlib Xticks 不习惯字符串值
- r - 在 r 中使用 ggplot2 的两个因素的可信区间
- java - Java:Threadpoolexecutor - 使用作业列表提交作业?
- laravel - 带有 Socket/Redis 的 Laravel - 私有通道路由不起作用