【发布时间】:2018-10-19 17:44:01
【问题描述】:
我学习 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 错误。
我尝试了很多方法,但我只是从网上可以找到的东西中学习。任何帮助将不胜感激。谢谢!
【问题讨论】: