How to match and replace elements between two dataframes

df1<-data.frame(id=c(1,2,3,4), value=c(10,20,30,40))

df2<-data.frame(col1=c(1,2,3,4), col2=c(4,3,2,1))

df2[] <- lapply(df2, function(x) {
   inds <- match(x, df1$id)
   ifelse(is.na(inds),x, df1$value[inds]) 
})


df2

 

 ================================================

 df <- data.frame(fruits = c("apple", "orange", "pineapple", "banana", "grape"), stringsAsFactors = FALSE)

df_rep <- data.frame(eng = c("apple", "orange", "grape"), esp = c("manzana", "naranja", "uva"), stringsAsFactors = FALSE)

df2 <- merge(df, df_rep, by.x = 'fruits', by.y = 'eng', all.x = TRUE)

df2$fruits <- ifelse(is.na(df2$esp), df2$fruits, df2$esp)


 

================================================

a <- data.frame(id=letters[1:4], age=c(18,NA,9,NA), sex=c("M","F","F","M"))
a
b <- data.frame(id=c("a","b","d"), age=c(18,32,20))
b
library(data.table)
setDT(a)[b, agei := i.age, on='id'][is.na(age), age := agei][,agei:= NULL][]
a

 

 ================================================

 library(dplyr)

dt1 <- read.table(text = "
SAMPLE_ID  CLASS_ID  CLASS  VALUE
1         0        0      5
2         0        0      5
3         0        0      3
4         0        0      6
5         0        0      6
6         0        0      3
", header = TRUE, stringsAsFactors = FALSE)

dt2 <- read.table(text = "
SAMPLE_ID  REF_VAL  CLASS_ID  CLASS
1        33        2      cloud
2        45        3      water
3        NA        3      water
4        NA        4      forest
", header = TRUE, stringsAsFactors = FALSE)

dt3 <- read.table(text = "
SAMPLE_ID  CLASS_ID  CLASS  STRATA
5         3       NA      20
6         3      water    19
", header = TRUE, stringsAsFactors = FALSE)

dt <- dt1[,c("SAMPLE_ID", "VALUE")]
dt <- left_join(dt, dplyr::bind_rows(dt2, dt3))
dt <- select(dt, SAMPLE_ID, CLASS_ID, CLASS, VALUE)

 

 

================================================

 

REF

https://stackoverflow.com/questions/51439076/how-to-match-and-replace-elements-between-two-dataframes

 https://stackoverflow.com/questions/51614901/r-conditional-replacement-using-two-data-frames

https://stackoverflow.com/questions/33954292/merge-two-data-frame-and-replace-the-na-value-in-r

https://stackoverflow.com/questions/48470586/r-replace-values-in-dataframe-based-on-two-matching-conditions

https://stackoverflow.com/questions/29809512/replace-values-between-two-data-frames-in-r

 https://stackoverflow.com/questions/50258443/fast-way-for-string-matching-and-replacement-from-another-dataframe-in-r

 

posted @   emanlee  阅读(167)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
历史上的今天:
2012-07-29 eclipse断点调试 出现Source not found
2012-07-29 Java Eclipse 如何导入外部Jar包
2010-07-29 SQL Server 2005脚本编辑窗口不能使用Enter,Backspace, Insert等按键
点击右上角即可分享
微信分享提示