2017-07-05 16 views
0

我有一个excel csv文件,其混合数据看起来类似于下面提供的示例数据框。如何循环R中的分析,同时从原始数据集迭代移除/替换行?

考虑下面的示例数据和分析:

#Installing packages 
library(cluster) 
library(vegan) 

size = c(5,300,500,4000,60000,2000) 
diet = c('A','A','C','D','C','D') 
area = c('Ae','Te','Fo','Ae','Te','Ae') 
time = c('Di','No','Di','Cr','Ca','Ca') 
distance = c(50,800,60,12000,150000,4200) 

DF = data.frame(size,diet,area,time,distance) 
row.names(DF) = c('Bird','Rat','Cobra','Dog','Human','Fish') 

#Calculate Gower distance dissimilarity matrix for species in "DF" 
DF.diss = daisy(DF, metric = "gower", type = list(logratio = c("size", "distance"))) 
attributes(DF.diss) 

#Performing hierarchical cluster analysis on dissimilarity matrix 
DF.Hclust = hclust(DF.diss, method = "average") 

#Calculating metric for species community based on hclust tree 
treeheight(DF.Hclust) 

与所有的行开始为例子做,我将如何去重新运行分析,同时反复移除一行,重新运行分析,把排回下一行,重新运行分析等等,直到对每个物种被移除/替换完成一次分析。

我有兴趣计算整个社区的树高度量标准,同时删除和替换单个物种以评估它们对整体树高度的贡献。

由于我的实际数据集有200多个物种,如果有一种方法可以在R中执行此操作,而无需准备200多个单独的csv文件,我已经删除了单个物种,然后分别运行提供分析。也有可能将每个treeheight输出/结果输出到一个表格吗?

回答

0

可以为此创建一个循环:

treeheights <- matrix(-9999, nrow(DF), 1) # make matrix to store answers. 
# I set -9999 as standard value so I can check if everything went alright afterwards. 

for (i in 1:nrow(DF)) { 
DF.LOO <- DF[-i,] # leave one (row) out 
DF.diss.LOO <- daisy(DF.LOO, metric = "gower", type = list(logratio = 
c("size", "distance"))) 
DF.HC.LOO <- hclust(DF.diss.LOO, method = "average") 
treeheights[i,] <- treeheight(DF.HC.LOO) 
} 

此经过的所有行,并总是会留下一个排出来。希望这可以帮助!

+0

所以我测试了它,它的工作原理与示例数据一样。要适应实际更大的数据集并让您知道一切是否顺利。万分感谢!只是一个简短的问题。我是否正确地假设度量出现在treeheight矩阵中的顺序是指在源数据帧中删除相应的rownumber中的物种之后的度量?像第一个treeheight是在狗被移除之后,第二个是在替换了狗然后去除了鼠之后? –

+0

是的!你是对的! DF [-i,]中的'i'表示它当前正在进行的迭代。它从1到最后一行。它具有当前迭代的值。所以它首先从原始数据集中删除第一行,在第二次迭代中删除原始数据集中的第二行。它并不真正放置第一行,它只是从原始数据集中删除一个,并将其另存为另一个数据集并使用该数据集进行计算。 –