Позвольте мне объяснить этот вопрос на примере. У меня есть три фрейма данных:
df1: это большая таблица гигантов c, которая содержит всю информацию.
df1 <- data.frame(Gene=c(1,2,3,4,5,6,7,8),
Description=c("ribonuclease HII", "glycerol-3-phosphate dehydrogenase", "Arginyl-tRNA synthetase (EC 6.1.1.19) 17855:19195", "Arginyl-tRNA synthetase (EC 6.1.1.19)", "PAS domain S-box protein", "ribonuclease HII", "Isoleucyl-tRNA synthetase", "Succinyl-CoA ligase"),
Species=c("aa", "bb","aa","cc","ee","ff","aa","dd"),
Number1= c(1,0,3,20,99,100,31,123),
Number2 =c(1000, 12636,12,455,231,454,123,1), stringsAsFactors = FALSE)
> df1
Gene Description Species Number1 Number2
1 1 ribonuclease HII aa 1 1000
2 2 glycerol-3-phosphate dehydrogenase bb 0 12636
3 3 Arginyl-tRNA synthetase (EC 6.1.1.19) 17855:19195 aa 3 12
4 4 Arginyl-tRNA synthetase (EC 6.1.1.19) cc 20 455
5 5 PAS domain S-box protein ee 99 231
6 6 ribonuclease HII ff 100 454
7 7 Isoleucyl-tRNA synthetase aa 31 123
8 8 Succinyl-CoA ligase dd 123 1
И df2 и df3, которые являются подмножествами df1 после некоторых функций grepl и regex:
df2 <- data.frame(Gene=c(1,2,3,4,5,6),
Description=c("ribonuclease HII", "glycerol-3-phosphate dehydrogenase", "glycerol-3-phosphate dehydrogenase", "Arginyl-tRNA synthetase (EC 6.1.1.19)", "PAS domain S-box protein", "glycerol-3-phosphate dehydrogenase"),
Species=c("aa", "bb","aa","cc","ee","ff"),
Number1= c(1,0,3,20,99,100),
Number2 =c(1000, 12636,12,455,231,454), stringsAsFactors = FALSE)
df3 <- data.frame(Gene=c(1,2,3,4,5,6),
Description=c("ribonuclease HII", "nitrite reductase large subunit", "Arginyl-tRNA synthetase (EC 6.1.1.19) 17855:19195", "Cytochrome cd1 nitrite reductase (EC:1.7.2.1)", "PAS domain S-box protein", "nitrite reductase large subunit"),
Species=c("aa", "bb","aa","cc","dd", "ff"),
Number1= c(1,0,3,20,99,100),
Number2 =c(1000, 12636,12,455,231,454), stringsAsFactors = FALSE)
> df2
Gene Description Species Number1 Number2
1 1 ribonuclease HII aa 1 1000
2 2 glycerol-3-phosphate dehydrogenase bb 0 12636
3 3 glycerol-3-phosphate dehydrogenase aa 3 12
4 4 Arginyl-tRNA synthetase (EC 6.1.1.19) cc 20 455
5 5 PAS domain S-box protein ee 99 231
6 6 glycerol-3-phosphate dehydrogenase ff 100 454
> df3
Gene Description Species Number1 Number2
1 1 ribonuclease HII aa 1 1000
2 2 nitrite reductase large subunit bb 0 12636
3 3 Arginyl-tRNA synthetase (EC 6.1.1.19) 17855:19195 aa 3 12
4 4 Cytochrome cd1 nitrite reductase (EC:1.7.2.1) cc 20 455
5 5 PAS domain S-box protein dd 99 231
6 6 nitrite reductase large subunit ff 100 454
Резюме моего вопроса:
Здесь я хотел бы получить все названия видов из df1 с определенным названием «Description» и найти его в df2 и df3. Если в обоих этих данных существует указанное имя c Description, я хочу вернуть таблицу, содержащую всю информацию об этом виде, с новым столбцом, в котором будет указан «полный путь» рядом с видами, проходящими этот критерий. Если он существует только в df2, он должен записать в новый столбец как неполный путь. Если этот вид не существует в обоих данных, он должен перейти к следующему виду и должен написать «Нет вхождений» в новый столбец. В конце я бы хотел таблицу с недавно произведенной информацией.
Вот что я попробовал (я выбрал определенное описание для df2 и df3, а именно «глицерол-3-фосфатдегидрогеназа» и «большая субъединица нитритредуктазы» соответственно):
for(i in unique(df1$Species)) {
x = subset(df2, Species == i & Description == "glycerol-3-phosphate dehydrogenase")
y = subset(df3, Species == i & Description == "nitrite reductase large subunit")
if (!is.na(x$Species) & !is.na(y$Species)){
print(i, "complete pathway")
}
else if(!is.na(x$Species) & is.na(y$Species)){
print(i, "incomplete pathway")
}
else if (is.na(x$Species) & is.na(y$Species)){next}
}
Однако выдается ошибка: Ошибка в if (! Is.na (x $ Species) &! Is.na (y $ Species)) {: аргумент имеет нулевую длину
Ожидаемый результат должна быть новая таблица (скажем, df4):
df4 <- data.frame(Species=c("aa", "bb","cc","ee","ff", "dd"),
New.Table=c("Incomplete p.", "Complete p.","No occurences","No occurences","Incomplete p.", "No occurences"), stringsAsFactors = FALSE)
Species New.Table
1 aa Incomplete p.
2 bb Complete p.
3 cc No occurences
4 ee No occurences
5 ff Incomplete p.
6 dd No occurences
Заранее спасибо. Я также открыт для ваших предложений относительно названия и правок в тексте!