通过循环另一个数据帧来映射数据帧的元素
我有两个具有不同维度的R数据帧。然而,但数据帧有id
列通过循环另一个数据帧来映射数据帧的元素
DF1:
nrow(df1)=22308
c1 c2 c3 pattern1.match
ENSMUSG00000000001_at 10.175115 10.175423 10.109524 0
ENSMUSG00000000003_at 2.133651 2.144733 2.106649 0
ENSMUSG00000000028_at 5.713781 5.714827 5.701983 0
DF2:
Genes Pattern.Count
ENSMUSG00000000276 ENSMUSG00000000276_at 1
ENSMUSG00000000876 ENSMUSG00000000876_at 1
ENSMUSG00000001065 ENSMUSG00000001065_at 1
ENSMUSG00000001098 ENSMUSG00000001098_at 1
nrow(df2)=425
我想遍历df2
,发现有pattern.count=1
所有基因和请在df1$pattern1.match
栏中查看。
基本上我想用df2$Genes
和df2$Pattern.Count
覆盖字段GENES
和pattern1.match
。 df2$Pattern.Count
中的所有元素都等于1。
我写了这个函数,但是当循环遍历所有这些行时,R冻结。
idcol <- ncol(df1)
return.frame.matches <- function(df1, df2, idcol) {
for (i in 1:nrow(df1)) {
for (j in 1:nrow(df2))
if(df1[i, 1] == df2[j, 1]) {
df1[i, idcol] = 1
break
}
}
return (df1)
}
是否有这样做的另一种方式几乎没有查杀电脑?
我不确定我是否确切地知道你在做什么,但下面至少应该让你更接近。
df1
的第一列似乎没有名称,它们是rownames
?
如果是这样,
df1$Genes <- rownames(df1)
然后,你可以再做一个merge
创建一个新的数据框与您所需要的基因:
merge(df1,subset(df2,Pattern.Count==1))
注意他们在公共列Genes
匹配。我不确定您想要对pattern1.match
列做什么,但merge
的df1
部分上的subset
可以包含相关条件。
编辑
通过在注释中的额外信息去,
df1$pattern1.match <- as.numeric(df1$Genes %in% df2$Genes)
应该实现你在找什么。
你的样本数据是不够的,玩的,但这里是我将开始:
dfm <- merge(df1, df2, by = idcol, all = TRUE)
dfm_pc <- subset(dfm, Pattern.Count == 1)
我把“idcol”从你的代码,没有看到它的数据。
col = ncol(df1),因为我想更新df1 $ pattern1.match中df2..like标记的最后一列,哪个基因可以在df2中找到... – agatha
所以我df1-主要数据框,我想检查int df1 $ pattern.match列哪些基因可以在df2中找到...基本上df2中的基因包含在df1中,我想检查通过将df1 $ pattern.match的元素标记为1,当在df2 – agatha
中找到基因时,该模式。计数列只有元素= 1,因为它已经从另一个数据集中提取出来了 – agatha
好的,现在有一个更好的解决方案可以解决问题。 – James