Допустим, у меня есть данные в широком формате (образцы в строке и виды в столбцах).
species <- data.frame(
Sample = 1:10,
Lobvar = c(21, 15, 12, 11, 32, 42, 54, 10, 1, 2),
Limtru = c(2, 5, 1, 0, 2, 22, 3, 0, 1, 2),
Pocele = c(3, 52, 11, 30, 22, 22, 23, 10, 21, 32),
Genmes = c(1, 0, 22, 1, 2,32, 2, 0, 1, 2)
)
И я хочу автоматически изменить названия видов на основе ссылки на функциональные группы, которые есть у меня для всех видов (так что это работает, даже если у меня больше ссылок, чем фактических видов в наборе данных), например:
reference <- data.frame(
Species_name = c("Lobvar", "Ampmis", "Pocele", "Genmes", "Limtru", "Secgio", "Nasval", "Letgos", "Salnes", "Verbes"),
Functional_group = c("Crustose", "Geniculate", "Erect", "CCA", "CCA", "CCA", "Geniculate", "Turf","Turf", "Crustose"),
stringsAsFactors = FALSE
)
EDIT
Благодаря предложениям @Dan Y теперь я могу изменить названия видов на названия их функциональных групп:
names(species)[2:ncol(species)] <- reference$Functional_group[match(names(species), reference$Species_name)][-1]
Однако в моем фактическом data.frame у меня больше видов, и это создает много функциональных групп с одинаковыми именами в разных столбцах. Теперь я хотел бы суммировать столбцы с одинаковыми именами. Я обновил пример, чтобы получить результаты, в которых имеется более одной функциональной группы с одинаковым именем.
Итак, я понял:
Sample Crustose CCA Erect CCA Crustose
1 21 2 3 1 2
2 15 5 52 0 3
3 12 1 11 22 4
4 11 0 30 1 1
5 32 2 22 2 0
6 42 22 22 32 0
и конечный результат, который я ищу, таков:
Sample Crustose CCA Erect
1 23 3 3
2 18 5 52
3 16 22 11
4 12 1 30
5 32 4 22
6 42 54 22
Как вы советуете приблизиться к этому? Спасибо за вашу помощь и удивительные предложения, которые я уже получил.