【发布时间】:2012-12-04 00:34:05
【问题描述】:
我有两个数据框。第一个看起来像
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 中的多个范围内,我希望它每次都合并)。最简单的方法是什么?
【问题讨论】:
-
我会使用一些正则表达式并添加新列。
dat2$VAR_fix <- as.integer(gsub('chr1:', '', dat2$VAR))。而且我会将 dat$Pos 分成两列的下限和上限。然后您可以使用实际数字进行检查。 -
dat2中的数字是否可以出现在dat的多行中? -
是否可以取消汇总
dat,即转换它,使其每行有一个数字而不是范围(我们可以为其提供算法),还是会导致太多可能性? -
还知道你的两个 data.frame 有多大会有所帮助。
-
我可以像贾斯汀那样分裂,但我想看看是否有更简单的方法。是的,dat2 数字可能会重复,我确实提到过。我可以取消总结 dat,但它会失去一些意义。并且,dat 为 865*12,dat2 为 5553*10。