x1c 0d1x的数据
我正在处理一个具有45行和6列的数据集(我已经删除了2个不相关的)。我试图创建一个函数,将通过每一行和计算辛普森的多样性(使用列值)。公式为:D = Σni(ni-1) / N(N-1)
,其中n是每列中的值,N是一行中所有列的值加在一起-希望这是有意义的,实际的等式对我的问题并不重要。
我有一段代码可以遍历各行,在这个循环中还有一个循环可以遍历一行中的所有列,并计算它们的丰度。我在循环结束时的目标是将它们放在一起,放入我创建的向量“simp”中,以保存每行的所有答案(simpson多样性)。这个函数应该是通用的,所以它可以用于任何数据集。
正如你在我的代码和结果中所看到的,vector显示了所有的行,但是只有第一行有答案。有人知道如何使这个函数更加自动化,这样它就会遍历每一行并将答案放入我的vector中吗?编辑-它需要像我的作业一样,我不能使用预先存在的simpson多样性函数:(
#My code: (killdat is the dataset I am working with, with the two columns removed).
#simp is my empty vector to hold answers
killdat=select(killarney, -Lake, -Status)
test=function(x){
simp=vector(mode="logical", length=nrow(Df))
for(j in 1:nrow(Df)){
for(i in 1:ncol(Df)){
abun=(Df[j,i])*(Df[j,i]-1)
n=Df[j,]
}
N=sum(n)
num=sum(abun)
den=N*(N-1)
simp[j]=1-(num/den);return(simp)
}}
test(killdat)
#my output:
[1] 0.9396795 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
[13] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
[25] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
[37] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
字符串
1条答案
按热度按时间weylhg0b1#
创建一些与您的描述相似的数据。
字符串
abdiv
包有一个simpson()
函数或者您可以实现自己的自定义函数。1.与对行进行操作不同,先对数据进行
pivot_longer()
操作,然后对分组的data.frame
进行操作更容易。型