合并两个数据框,但均存在两个数据框

时间:2018-12-20 13:32:20

标签: r dplyr plyr reshape2

说我有两个data.frames

df = data.frame(gene = c("KRAS", "FOS"), A6 = c(20, 50), A7 = c(90, 80))
df2 = data.frame(gene = c("KRAS", "FOS"), A6 = c(20, 250) )

这里重复A6,当我尝试使用merge(df, df2, by = "gene")合并这两个数据框时,它会使用A6.xA6.y创建新列。

是否有一种方法可以合并它,使其取重复列的均值?谢谢!

2 个答案:

答案 0 :(得分:8)

merge中按数字列名称(子字符串)对split进行数据处理并获得rowMeans

cbind(out[1], sapply(split.default(out[-1], 
          sub("\\..*", "", names(out)[-1])), rowMeans))
#  gene  A6 A7
#1  FOS 150 80
#2 KRAS  20 90

数据

out <- merge (df, df2, by="gene")

答案 1 :(得分:3)

由于此示例中所需的merge并未向df添加任何新列,因此可以使用data.table更新联接

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]