R 创建循环,以迭代方式聚合数据,从而获得更大的集群大小

R 创建循环,以迭代方式聚合数据,从而获得更大的集群大小,r,loops,aggregate-functions,R,Loops,Aggregate Functions,首先,数据以数据帧df的格式存在。我已经通过绘图矩阵将df转换成了一个物种mat(我认为使用这种格式更容易)。物种是行,地块是列。细胞代表在该图中发现该物种的频率 set.seed(3421) df<-data.frame(plot= as.factor(c(rep(1,4),rep(2,4),rep(3,3),rep(4,2), rep(5,6),rep(6,7))), species= sample(letters[1:26]

首先,数据以数据帧
df
的格式存在。我已经通过绘图矩阵将
df
转换成了一个物种
mat
(我认为使用这种格式更容易)。物种是行,地块是列。细胞代表在该图中发现该物种的频率

set.seed(3421)
df<-data.frame(plot= as.factor(c(rep(1,4),rep(2,4),rep(3,3),rep(4,2),
                   rep(5,6),rep(6,7))),
           species= sample(letters[1:26], size= 26, replace=TRUE))

library("tidyverse")
df<- 
  df%>%
  group_by(plot, species)%>%
  summarize(freq= length(species))
mat<- dcast(df , species~plot, value.var = "freq", fill=0 )
mat<- matrix(c(1,0,0,0,0,0,1,0,0,0,0,0,0,0,2,0,
           2,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,
           0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,
           0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,
           0,0,0,0,1,0,0,1,0,1,1,0,0,1,0,1,
           1,1,0,0,0,0,0,0,1,0,1,2,1,0,0,0), nrow=16, ncol=6)
dimnames(mat)<- list(c("a", "c", "f", "h", "i", "j", "l", "m", "p", "q", "s", "t", "u", "v","x", "z"), 
                  c("1", "2", "3", "4", "5", "6"))

请注意,
result\u df
包含最多三个集群大小的结果,但对于本例,数据帧集群大小将大到6,因此循环需要迭代到最大集群大小

你好@Danielle,你认为你能把你的问题简化为一些非常具体的问题吗?这些问题可以在最小的所需对象上进行演示@Bulat我最需要帮助的第一步是为每个簇大小创建矩阵列表。如何迭代聚合图是最具挑战性的步骤。一旦我有了这个列表,我就能知道如何运行各种函数,因此,如果这有助于你省略文章的最后一部分,即我要求在列表中的矩阵上运行函数,那么请省略这一部分。我对我的OP做了一些编辑,以澄清我主要需要帮助的内容。这里有一个链接,指向与第一部分相关的更具体的问题:我很高兴你得到了更多的答案具体问题已经解决了。看看这里,进一步改进这个。
mat1<- matrix(c(1,0,0,0,0,0,1,0,0,0,0,0,0,0,2,0), nrow=16, ncol=1)
dimnames(mat1)<- list(c("a", "c", "f", "h", "i", "j", "l", "m", "p", "q", "s", "t", "u", "v","x", "z"), 
                  c("1"))
mat2<- matrix(c(2,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0), nrow=16)
dimnames(mat2)<- list(c("a", "c", "f", "h", "i", "j", "l", "m", "p", "q", "s", "t", "u", "v","x", "z"), 
                  c("1"))
mat3<- matrix(c(0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0), nrow=16)
dimnames(mat3)<- list(c("a", "c", "f", "h", "i", "j", "l", "m", "p", "q", "s", "t", "u", "v","x", "z"), 
                  c("1"))
mat4<- matrix(c(0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0), nrow=16)
dimnames(mat4)<- list(c("a", "c", "f", "h", "i", "j", "l", "m", "p", "q", "s", "t", "u", "v","x", "z"), 
                  c("1"))
mat5<- matrix(c(0,0,0,0,1,0,0,1,0,1,1,0,0,1,0,1), nrow=16)
dimnames(mat5)<- list(c("a", "c", "f", "h", "i", "j", "l", "m", "p", "q", "s", "t", "u", "v","x", "z"), 
                  c("1"))
mat6<- matrix(c(1,1,0,0,0,0,0,0,1,0,1,2,1,0,0,0), nrow=16)
dimnames(mat6)<- list(c("a", "c", "f", "h", "i", "j", "l", "m", "p", "q", "s", "t", "u", "v","x", "z"), 
                  c("1"))
mat7<- matrix( c(3,0,0,0,1,0,1,0,0,0,0,0,0,0,2,0,
             2,0,1,1,2,0,0,0,0,0,0,0,0,0,1,0,
             0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,
             0,1,0,0,1,1,0,1,0,1,1,0,0,1,0,1,
             1,1,0,0,1,0,0,1,1,1,2,2,1,1,0,1), nrow=16)
dimnames(mat7)<- list(c("a", "c", "f", "h", "i", "j", "l", "m", "p", "q", "s", "t", "u", "v","x", "z"), 
                  c("1_2", "2_3", "3_4", "4_5", "5_6"))
mat8<- matrix( c(3,0,1,1,2,0,1,0,0,0,0,0,0,0,3,0,
             2,1,1,1,2,1,0,0,0,0,0,0,0,0,1,0,
             0,1,1,1,2,1,0,1,0,1,1,0,0,1,0,1,
             1,2,0,0,1,1,0,1,1,1,2,2,1,1,0,1), nrow=16)
dimnames(mat8)<- list(c("a", "c", "f", "h", "i", "j", "l", "m", "p", "q", "s", "t", "u", "v","x", "z"), 
                  c("1_2_3", "2_3_4", "3_4_5", "4_5_6"))
mat_list<- list(mat1, mat2, mat3, mat4, mat5, mat6, mat7, mat8 )
#df for cluster size 1
result_df1<- data.frame(cluster_size= rep("1", 96), 
                    aggregate_ID= c(rep("1",16), rep("2", 16), rep("3", 16), rep("4", 16), rep("5", 16), rep("6",16)), 
                    species= rep(c("a", "c", "f", "h", "i", "j", "l", "m", "p", "q", "s", "t", "u", "v","x", "z"), 6), 
                    freq= c(1,0,0,0,0,0,1,0,0,0,0,0,0,0,2,0,
                    2,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,
                    0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,
                    0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,
                    0,0,0,0,1,0,0,1,0,1,1,0,0,1,0,1,
                    1,1,0,0,0,0,0,0,1,0,1,2,1,0,0,0), 
mean_freq=c(1,0,0,0,0,0,1,0,0,0,0,0,0,0,2,0,
        2,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,
        0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,
        0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,1,0,0,1,0,1,1,0,0,1,0,1,
        1,1,0,0,0,0,0,0,1,0,1,2,1,0,0,0),
area= rep(78.54, 96))
result_df1$freq_per_area<- result_df1$mean_freq/78.54               

#df for cluster size 2                                          
result_df2<- data.frame( cluster_size= rep("2",80), 
                     aggregate_ID= c(rep("1_2",16), rep("2_3",16), rep("3_4",16), rep("4_5",16), rep("5_6",16)),
                     species= c("a", "c", "f", "h", "i", "j", "l", "m", "p", "q", "s", "t", "u", "v","x", "z"),
                     freq=c(6,3,2,2,6,2,1,2,1,2,3,2,1,2,3,2),
                     mean_freq=(c(6,3,2,2,6,2,1,2,1,2,3,2,1,2,3,2)/5), 
                     area= rep(157.08, 16))
result_df2$freq_per_area<- result_df2$mean_freq/157.08              

#df for cluster size 3
result_df3<- data.frame( cluster_size= rep("3",64), 
                     aggregate_ID= c(rep("1_2_3",16), rep("2_3_4",16), rep("3_4_5",16), rep("4_5_6",16)),
                     species= c("a", "c", "f", "h", "i", "j", "l", "m", "p", "q", "s", "t", "u", "v","x", "z"),
                     freq=c(6,4,3,3,7,3,1,2,1,2,3,2,1,2,4,2),
                     mean_freq=(c(6,4,3,3,7,3,1,2,1,2,3,2,1,2,4,2)/5), 
                     area= rep(157.08, 16))
 result_df3$freq_per_area<- result_df3$mean_freq/235.62

 result_df<- rbind(result_df1,result_df2,result_df3)