Я работаю с таксономическими данными и перенес свои данные на второй последний шаг, прежде чем я смогу отобразить их графически.Тем не менее, мне нужны строки, чтобы соответствовать условиям, и вот где я застрял - хорошо застрял, потому что я не хочу делать это вручную.
Мои данные:
x <- data.frame("Phylum" = c("Chordata", "Chordata", "Chordata", "Chordata", "Chordata", "Chordata"),
"Class" = c("NA", "Actinopterygii", "Actinopterygii", "Actinopterygii", "Actinopterygii", "Actinopterygii"),
"Order" = c("NA", "NA", "Gadiformes", "Gadiformes", "Gadiformes", "Gadiformes"),
"Family" = c("NA", "NA", "NA", "Moridae", "Moridae", "Moridae"),
"Genus" = c("NA", "NA", "NA", "NA", "Notophycis", "Notophycis"),
"Species" = c("NA", "NA", "NA", "NA", "NA", "Notophycis marginata"),
Number = c(21616, 12123, 1497, 730,730,730))
Требуемый конечный результат:
y <- data.frame("Phylum" = c("Chordata", "Chordata", "Chordata", "Chordata"),
"Class" = c("NA", "Actinopterygii", "Actinopterygii", "Actinopterygii"),
"Order" = c("NA", "NA", "Gadiformes", "Gadiformes"), "Family" = c("NA", "NA", "NA", "Moridae"),
"Genus" = c("NA", "NA", "NA", "Notophycis"), "Species" = c("NA", "NA", "NA", "Notophycis marginata"),
Number = c(9493, 10626, 767, 730))
Это простой пример подмножества из гораздо более сложного набора данных.Так что, если бы я мог как-то вставить это в код:
- сумма числа (
Phylum == "P1" & Class == "NA"
) - сумма числа (Class == "C1" & Order == "NA"
), если тип совпадений, и это будет равно новому номеру P1 - сумма числа (
Class == "C1" & Order== "NA"
) - сумма числа (Order == "O1" & Family == "NA"
) совпадений класса IF, и это будет равно новому числу С1 и т. Д. ...
НО, если число совпадает для нескольких строкМне нужно иметь код для оценки этих строк и выбрать строку с наименьшим количеством NA и сохранить это число ...
Я бы предположил, что я ищу код для функции, чтобы сделать это, но не имеюИдея с чего начать!
Оцените помощь:)
ОБНОВЛЕНИЕ
Тестер:
Phylum Class Order Family Genus Species Reads_sum
Chordata Elasmobranchii Carcharhiniformes NA NA NA 31
Chordata Actinopterygii Perciformes Scombridae NA NA 589
Chordata Elasmobranchii Carcharhiniformes Pentanchidae NA NA 31
Chordata Actinopterygii Myctophiformes Myctophidae Notoscopelus NA 208
Chordata Actinopterygii Perciformes Scombridae Katsuwonus NA 589
Chordata Actinopterygii Myctophiformes Myctophidae Notoscopelus Notoscopelus caudispinosus 178
Chordata Actinopterygii Perciformes Scombridae Katsuwonus Katsuwonus pelamis 589
Cnidaria Hydrozoa Leptothecata Plumulariidae NA NA 69
Cnidaria Hydrozoa Leptothecata Plumulariidae Plumularia NA 69
Echinodermata Ophiuroidea NA NA NA NA 146
Echinodermata Ophiuroidea Ophiurida NA NA NA 137
Echinodermata Ophiuroidea Ophiurida Ophiuridae NA NA 137
Echinodermata Ophiuroidea Ophiurida Ophiuridae Ophioplinthus NA 137
Echinodermata Ophiuroidea Ophiurida Ophiuridae Ophioplinthus Ophioplinthus accomodata 137
Mollusca Cephalopoda Oegopsida Ommastrephidae NA NA 34311
Ochrophyta Phaeophyceae Ectocarpales Acinetosporaceae NA NA 29
Код, который преформуетчто бы я хотел, НО мне пришлось бы каждый раз менять переменные:
Tester$Reads_sum[Tester$Class == "Ophiuroidea" & Tester$Order == "NA"] - sum(Tester$Reads_sum[Tester$Class == "Ophiuroidea" & Tester$Order != "NA" & Tester$Family == "NA"])
И поэтому я надеялся, что что-то подобное сработает, и мне просто нужно изменить класс на другие выбранные таксономические ранги:
for (i in unique(Tester$Class)){
Tester$Test.1 <- ifelse(Tester$Class != "NA" & Tester$Order == "NA",
Tester$Reads_sum[Tester$Class == i & Tester$Order == "NA"] - sum(Tester$Reads_sum[Tester$Class == i & Tester$Order != "NA" & Tester$Family == "NA"]), 0)
}
Но он дает мне NA вместо 9.
Конечные данные sдолжен выглядеть так:
Phylum Class Order Family Genus Species Reads_sum
Chordata Elasmobranchii Carcharhiniformes Pentanchidae NA NA 31
Chordata Actinopterygii Myctophiformes Myctophidae Notoscopelus NA 30
Chordata Actinopterygii Myctophiformes Myctophidae Notoscopelus Notoscopelus caudispinosus 178
Chordata Actinopterygii Perciformes Scombridae Katsuwonus Katsuwonus pelamis 589
Cnidaria Hydrozoa Leptothecata Plumulariidae Plumularia NA 69
Echinodermata Ophiuroidea NA NA NA NA 9
Echinodermata Ophiuroidea Ophiurida Ophiuridae Ophioplinthus Ophioplinthus accomodata 137
Mollusca Cephalopoda Oegopsida Ommastrephidae NA NA 34311
Ochrophyta Phaeophyceae Ectocarpales Acinetosporaceae NA NA 29