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)