合并具有重复项的 data.frames

use*_*855 5 merge r duplicates

我有很多 data.frames,例如:

df1 = data.frame(names=c('a','b','c','c','d'),data1=c(1,2,3,4,5))
df2 = data.frame(names=c('a','e','e','c','c','d'),data2=c(1,2,3,4,5,6))
df3 = data.frame(names=c('c','e'),data3=c(1,2))
Run Code Online (Sandbox Code Playgroud)

我需要合并这些 data.frames,而不删除名称重复项

> result
  names data1 data2 data3
1  'a'    1    1      NA
2  'b'    2    NA     NA
3  'c'    3    4      1
4  'c'    4    5      NA
5  'd'    5    6      NA
6  'e'    NA   2      2       
7  'e'    NA   3      NA
Run Code Online (Sandbox Code Playgroud)

我找不到像合并选项这样的函数来处理名称重复。感谢您的帮助。定义我的问题。数据来自生物实验,其中一个样本具有不同数量的重复。我需要合并所有实验,并且需要生成这个表。我无法为重复生成唯一标识符。

G. *_*eck 4

首先定义一个函数 ,run.seq它提供重复项的序列号,因为从输出看来,我们需要的是合并的每个组件中每个名称的第 i 个重复项都关联起来。然后创建数据框列表并向run.seq每个组件添加一列。最后使用Reduce将它们全部合并。

run.seq <- function(x) as.numeric(ave(paste(x), x, FUN = seq_along))

L <- list(df1, df2, df3)
L2 <- lapply(L, function(x) cbind(x, run.seq = run.seq(x$names)))

out <- Reduce(function(...) merge(..., all = TRUE), L2)[-2]
Run Code Online (Sandbox Code Playgroud)

最后一行给出:

> out
  names data1 data2 data3
1     a     1     1    NA
2     b     2    NA    NA
3     c     3     4     1
4     c     4     5    NA
5     d     5     6    NA
6     e    NA     2     2
7     e    NA     3    NA
Run Code Online (Sandbox Code Playgroud)

编辑:修改run.seq后,输入不需要排序。