Используя tidyr
и dplyr
, вы можете сначала преобразовать столбцы нашего года в более длинный формат, затем использовать pivot_wider
, чтобы создать столбцы "a" и "b", собрать "site" и "ID" и, наконец, оставьте только нужные столбцы:
library(tidyr)
library(dplyr)
df %>% pivot_longer(.,-c(Species, site), names_to = "ID", values_to = "val") %>%
pivot_wider(.,names_from = Species, values_from = val) %>%
rowwise() %>%
mutate(ID = paste(site,ID, sep = "_")) %>%
select(ID, a, b)
Source: local data frame [9 x 3]
Groups: <by row>
# A tibble: 9 x 3
ID a b
<chr> <int> <int>
1 1_2001 0 3
2 1_2002 1 0
3 1_2003 4 4
4 2_2001 1 1
5 2_2002 1 1
6 2_2003 0 1
7 3_2001 5 4
8 3_2002 5 5
9 3_2003 5 5
Данные
structure(list(Species = c("a", "a", "a", "b", "b", "b"), site = c(1L,
2L, 3L, 1L, 2L, 3L), `2001` = c(0L, 1L, 5L, 3L, 1L, 4L), `2002` = c(1L,
1L, 5L, 0L, 1L, 5L), `2003` = c(4L, 0L, 5L, 4L, 1L, 5L)), row.names = c(NA,
-6L), class = c("data.table", "data.frame"), .internal.selfref = <pointer: 0x56276b4f1350>)