【发布时间】:2019-06-23 17:51:31
【问题描述】:
我有一个名为 siteData 的数据框,它有大约 40,000 行和 4 列,这是一个示例。
Uniprot.ID Site Other_Sites
Q8NE71 E403
Q8NE71 E705
Q09666 E545
Q09666 E550
Q09666 E574
Q09666 E766
Q09666 E796
对于给定的Uniprot.ID,我想将列出的所有站点添加到Other_Sites 列中,但相邻的Site 列中列出的站点除外。
我已经尝试过这个简单的 for 循环。我了解如何使用grepl 访问给定Uniprot.ID 出现的行号,我遇到的问题是以它会为整个数据集重复执行此操作的方式编写代码。
for (i in 1:nrow(siteData)) {
siteData$Other_Sites[i] = siteData[which(grepl(siteData$Uniprot.ID[i],
siteData$Uniprot.ID)),2]
}
目前我的代码只向Other_Sites 列添加了一个Site 值,但对于我的示例数据,我希望它看起来像这样:
Uniprot.ID Site Other_Sites
Q8NE71 E403 E705
Q8NE71 E705 E403
Q09666 E545 E550,E574,E766,E769
Q09666 E550 E545,E574,E766,E769
Q09666 E574 E545,E550,E766,E769
Q09666 E766 E545,E550,E574,E769
Q09666 E796 E545,E550,E574,E766
更多数据放表:
structure(list(Uniprot.ID = c("Q8NE71", "Q8NE71", "Q8NE71", "Q8NE71",
"Q8NE71", "Q8NE71", "Q09666", "Q09666", "Q09666", "Q09666", "Q09666",
"Q09666", "Q09666", "Q09666", "Q09666", "Q09666", "Q09666", "Q09666",
"Q09666", "Q09666", "Q09666", "Q09666", "Q09666", "Q09666", "Q09666",
"Q09666", "Q09666", "Q09666", "Q6P6C2", "E9PB61", "E9PB61"),
Site = c("E168", "E282", "E291", "E300", "E403", "E705",
"E545", "E550", "E574", "E766", "E796", "E797", "E924", "E1045",
"D1169", "E1173", "E1301", "E1422", "E4894", "E5219", "E5458",
"E5673", "E5689", "E5702", "E5703", "E5734", "E5755", "E5759",
"E50", "E249", "E250"), PMID = c(27256882L, 27256882L, 27256882L,
27256882L, 27256882L, 27256882L, 27256882L, 27256882L, 27256882L,
27256882L, 27256882L, 27256882L, 27256882L, 27256882L, 27256882L,
27256882L, 27256882L, 27256882L, 27256882L, 27256882L, 27256882L,
27256882L, 27256882L, 27256882L, 27256882L, 27256882L, 27256882L,
27256882L, 27256882L, 27256882L, 27256882L), Other_Sites = c("E20",
"E20", "E20", "E20", "E20", "E20", "E545", "E545", "E545",
"E545", "E545", "E545", "E545", "E545", "E545", "E545", "E545",
"E545", "E545", "E545", "E545", "E545", "E545", "E545", "E545",
"E545", "E545", "E545", "E50", "E249", "E249")), row.names = 100:130, class = "data.frame")
【问题讨论】: