gpt4 book ai didi

r - 合并具有重复项的 data.frames

转载 作者:行者123 更新时间:2023-12-02 20:32:09 33 4
gpt4 key购买 nike

我有很多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))

我需要合并这些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.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]

最后一行给出:

> 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.seq,以便不需要对输入进行排序。

关于r - 合并具有重复项的 data.frames,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9864617/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com