У меня есть датафрейм под названием siteData с около 40000 строк и 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. Я понимаю, как получить доступ к номеру строки, где заданный Uniprot.ID
встречается с использованием grepl
, и у меня возникли проблемы с написанием кода таким образом, чтобы он делал это многократно для всего набора данных.
for (i in 1:nrow(siteData)) {
siteData$Other_Sites[i] = siteData[which(grepl(siteData$Uniprot.ID[i],
siteData$Uniprot.ID)),2]
}
В данный момент мой код добавляет только одно значение Site
в столбец Other_Sites
, но для моих примеров данных я бы хотел, чтобы оно выглядело так:
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")