gpt4 book ai didi

r - 基于R中的不同值合并数据帧

转载 作者:行者123 更新时间:2023-12-04 19:37:42 24 4
gpt4 key购买 nike

我有两个数据框。第一个看起来像

dat <- data.frame(matrix(nrow=2,ncol=3))
names(dat) <- c("Locus", "Pos", "NVAR")
dat[1,] <- c("ACTC1-001_1", "chr15:35087734..35087734", "1" )
dat[2,] <- c("ACTC1-001_2 ", "chr15:35086890..35086919", "2")

其中 chr15:35086890..35086919 表示该范围内的所有数字。

第二个看起来像:

dat2 <- data.frame(matrix(nrow=2,ncol=3))
names(dat2) <- c("VAR","REF.ALT"," FUNC")
dat2[1,] <- c("chr1:116242719", "T/A", "intergenic" )
dat2[2,] <- c("chr1:116242855", "A/G", "intergenic")

我想通过 dat$Pos 和 dat2$VAR 中的值合并它们。如果 dat2$VAR 中单元格中的单个数字包含在 dat$Pos 中单元格的范围内,我想合并这些行。如果这种情况发生不止一次(dat2$VAR 在 dat$Pos 中不止一个范围,我希望每次都合并)。最简单的方法是什么?

最佳答案

这是一个解决方案,很短但不是特别有效,所以我不推荐它用于大数据。但是,您似乎表示您的数据没有那么大,所以请尝试一下并告诉我:

library(plyr)

exploded.dat <- adply(dat, 1, function(x){
parts <- strsplit(x$Pos, ":")[[1]]
chr <- parts[1]
range <- strsplit(parts[2], "..", fixed = TRUE)[[1]]
start <- range[1]
end <- range[2]
data.frame(VAR = paste(chr, seq(from = start, to = end), sep = ":"), x)
})

merge(dat2, exploded.dat, by = "VAR")

如果它太慢或使用了太多内存来满足您的需求,您将不得不实现一些更复杂的东西,另一个问题看起来是一个很好的起点:Merge by Range in R - Applying Loops .

关于r - 基于R中的不同值合并数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13694263/

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