Поскольку требуемый merge
в этом примере не добавляет новые столбцы в df
, вы можете использовать обновление data.table join
library(data.table)
setDT(df)
setDT(df2)
df[df2, on = .(gene), A6 := (A6 + i.A6)/2]
df
# gene A6 A7
# 1: KRAS 20 90
# 2: FOS 150 80
Это изменит df
.Если вам нужен новый фрейм данных, вы можете использовать copy
copy(df)[df2, on = .(gene), A6 := (A6 + i.A6)/2]
Для нескольких общих столбцов
no.avg <- 'gene'
common <- intersect(names(df), names(df2))
common <- setdiff(common, no.avg)
df[df2, on = .(gene),
(common) := (get(common) + get(paste0('i.', common)))/2]