当R中满足列条件时,使用for循环填充矩阵

Jarrod Ver Steeg

我在学习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错误。

我尝试了很多方法,但我只能从网上可以中学到的东西中学习。任何帮助将不胜感激。谢谢!

完善

考虑by(按因子分解数据帧以在子集上运行进程的table功能)和(按因子组合建立计数列联表的功能)。最终结果是矩阵的命名列表。

matrix_list <- by(df, df$Year, function(sub) {    
    mat <- table(sub$Haul, sub$Species)
    mat[as.matrix(sub[c("Haul", "Species")])] <- sub$Count

    return(mat)      
})

matrix_list$`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

matrix_list$`2001`

#   a b c d e
# 1 3 0 2 0 1
# 2 0 4 0 0 0

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用双循环填充R中的矩阵

如何在重复循环中填充矩阵并按R中的条件删除列?

满足条件时在R中嵌套循环以提供DF位置

在另一个工作表中循环和查找 3 个条件,并在满足条件时在空列中填充数据

即使在 R 中满足条件,也使用 WHILE 进行无限循环

如何用R中的循环填充矩阵?

循环以在R中逐行填充矩阵

R:条件矩阵填充,用于通过行和列索引的for循环

R:从循环填充矩阵

仅在满足条件时填充

使用循环在TensorFlow中填充矩阵

使用R中的向量随机填充矩阵的列

计算满足某些条件的矩阵中的列数

基于矩阵中列的排列,满足条件的行数

如何测试R中矩阵的每个元素是否满足条件?

仅在满足条件时循环?

在我自己的列上使用 SQL 中的算术来填充第三列为零。(复杂,仅当满足某些条件时)

满足条件时在java中中断多个for循环Java

当满足计数或长度条件时,使用TakeWhile中断循环

在 R-studio 中,如何使用相同的 [i] 重复 for 循环,直到满足特定条件?

使用 for 循环以 -1、0 和 1 等比例填充 R 中的 5*5 矩阵

使用 R 中的逻辑条件填充列的问题

循环遍历行直到满足 R 中的条件

r-在列中满足特定条件时保留行

如何使用for循环填充矩阵

在R中填充矩阵

在R中填充矩阵

循环遍历数据框并在满足条件时将特定列中的行附加到新列表

如何在R中使用条件/ for循环将单列数据转换为两列矩阵