Я изучаю R для экологического исследования и пытаюсь написать функцию для создания нескольких матриц.
Мой фрейм данных выглядит так:
df <- data.frame(Species = c("a", "b", "c", "a", "d", "a", "b", "c", "c", "a", "c", "b", "e"),
Count = c(2, 3, 1, 3, 4, 1, 2, 1, 1, 3, 2, 4, 1),
Haul = c(1, 1, 2, 2, 1, 3, 2, 3, 4, 1, 1, 2, 1),
Year = c(2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2001, 2001, 2001, 2001))
Напечатано:
Species Count Haul Year
1 a 2 1 2000
2 b 3 1 2000
3 c 1 2 2000
4 a 3 2 2000
5 d 4 1 2000
6 a 1 3 2000
7 b 2 2 2000
8 c 1 3 2000
9 c 1 4 2000
10 a 3 1 2001
11 c 2 1 2001
12 b 4 2 2001
13 e 1 1 2001
Я хочу создать цикл for, который будет генерировать и хранить матрицы в списке.Эти матрицы будут основываться на улове и видах в каждом году.
Например, я пытался что-то вроде.
for (i in sort(unique(df$Year))) {
ncol <- sort(unique(unlist(df$Species)))
nrow <- sort(unique(unlist(subset(df, Year == i, select=c("Haul")))))
mat <- matrix(0, length(nrow), length(ncol),
dimnames = list(nrow, ncol))
mat[as.matrix(df[c("Haul", "Species")])] <- df$Count
Это не помогло.
Я ищу решение, подобное
list[[1]]
[["2000"]] a b c d e
1 2 3 0 4 0
2 3 2 1 0 0
3 1 0 1 0 0
4 0 0 1 0 0
[["2001"]] a b c d e
1 3 0 2 0 1
2 0 4 0 0 0
цель состоит в том, чтобы столбцы представляли собой общее количество когда-либо замеченных видов, а строки - конкретные выборки за год.Затем цикл for будет складывать матрицы в список.
Главное, что я попробовал, это создать обнуленную матрицу и попытаться заполнить данные функцией mat[as.matrix()]
, но я получаю ошибку subscript out of bound
.
Я перепробовал много методов, но я только учусь на том, что я могу найти в Интернете.Любая помощь будет принята с благодарностью.Спасибо!