我一直试图这样做,但没有到达任何地方。任何帮助将非常感谢。
df1 <- data.frame(chrom = "chr1", start=c(10,20,30), end = c(100,200,300), stringsAsFactors=FALSE)
df2 <- data.frame(chrom = c("chr1", "chr2", "chr3"),start=c(15,500,150), end = c(75,1000,300), stringsAsFactors=FALSE)
我希望获得df1$chrom == df2$chrom
所有df2行。或者更好的是:我想在新的向量中生成输出并显示df1的行,然后是df2,反之亦然df1$chrom == df2$chrom
。
我使用for循环尝试了这个,如下所示:
for(i in 1:nrow(df2)){
x[i] <- df2[which(df1$chrom == df2$chrom[i])]
}
不工作!
答案 0 :(得分:3)
df2[df2$chrom == df1$chrom, ]
# chrom start end
# 1 chr1 15 75
根据您的评论,您可能还想尝试以下操作。
merge(df1, df2, by = 'chrom')
这将在两个帧(“表”)上进行数据库“连接”。结果就是这样。
chrom start.x end.x start.y end.y
1 chr1 10 100 15 75
2 chr1 20 200 15 75
3 chr1 30 300 15 75
采用R并不总是一种有效的方法,但它很方便。您可以使用参数控制“.x”内容(请参阅帮助页面:?merge)。如果您希望包含df2中的所有字段,则可以添加“all = TRUE”参数设置以进行合并。
正如我之前提到的,最好考虑整体方法。这不一定是处理数据的有效方法,因为现在您已在结果框架中输入了大量冗余。相反,在数据库术语中,我们将df2视为“查找”表。 df1中的“chr1”引用与df1相关但与其不同的df2(外键)中的信息。而不是像上面的合并所示,重复了df2的信息,我们可以在需要时简单地访问它。这是合并使方便的地方。