我有一个数据框,显示每个物种(列)每个图(线)的树数。
我有115种树木和6264种树木
头(ESP)
02 03 04 05 06 07 08S 09 10 11 12P 12V 13B 13C 13G 14 15P 15S 16 17C
600005 0 0 0 0 0 0 0 0 16 0 0 0 0 0 0 0 0 32 0 0
600008 0 0 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 5
600012 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
600030 3 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
600033 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
600035 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
我正在尝试计算每个地块中每个物种的比例。 我试过这样做:
apply(esp,c(1,2), function(x){ifelse(x>0, x/sum(x)*100,0)})
我想要的是一个数据框,其中不同的图表为线条,物种的比例为列。
感谢您的帮助。
我回来只是为了一个愚蠢的问题:现在我的数据框中每个地块的每个物种的比例,我想选择所有“纯”的地块,超过一个物种的80%
我知道如何为一个物种选择行:
pur<-prop[which(prop[,1]>80),]
这有效并给了我想要的东西,但由于我有115列,我尝试用循环来做:
for (i in 1:115){
prop[which(prop[,i]>80),]
}
但是效果并不好。
我也尝试过使用但是哪个()不是函数,所以它也不起作用。
apply(prop,2,which(prop[,1]>80))
谢谢
答案 0 :(得分:0)
这是你要找的吗?
esp/rowSums(esp)
X02 X03 X04 X05 X06 X07 X08S X09 X10 X11 X12P X12V
600005 0.000 0 0 0.000 0 0 0 0 0.3333333 0 0 0.0000000
600008 0.000 0 0 0.000 0 0 0 0 0.0000000 0 0 0.6153846
600012 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
600030 0.375 0 0 0.625 0 0 0 0 0.0000000 0 0 0.0000000
600033 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
600035 0.000 0 0 1.000 0 0 0 0 0.0000000 0 0 0.0000000
X13B X13C X13G X14 X15P X15S X16 X17C
600005 0 0 0 0 0 0.6666667 0 0.0000000
600008 0 0 0 0 0 0.0000000 0 0.3846154
600012 NaN NaN NaN NaN NaN NaN NaN NaN
600030 0 0 0 0 0 0.0000000 0 0.0000000
600033 NaN NaN NaN NaN NaN NaN NaN NaN
600035 0 0 0 0 0 0.0000000 0 0.0000000
结果中的NaN
(非A数)元素显然是由于某些图的总物种数为0,从而导致除以零。如果您愿意,可以用其他方法替换这些值,例如:
res <- esp/rowSums(esp)
res <- sapply(res, function(v) {
v[is.nan(v)] <- 0
return(v)
})
round(res,2)
X02 X03 X04 X05 X06 X07 X08S X09 X10 X11 X12P X12V X13B X13C X13G
[1,] 0.00 0 0 0.00 0 0 0 0 0.33 0 0 0.00 0 0 0
[2,] 0.00 0 0 0.00 0 0 0 0 0.00 0 0 0.62 0 0 0
[3,] 0.00 0 0 0.00 0 0 0 0 0.00 0 0 0.00 0 0 0
[4,] 0.38 0 0 0.62 0 0 0 0 0.00 0 0 0.00 0 0 0
[5,] 0.00 0 0 0.00 0 0 0 0 0.00 0 0 0.00 0 0 0
[6,] 0.00 0 0 1.00 0 0 0 0 0.00 0 0 0.00 0 0 0
X14 X15P X15S X16 X17C
[1,] 0 0 0.67 0 0.00
[2,] 0 0 0.00 0 0.38
[3,] 0 0 0.00 0 0.00
[4,] 0 0 0.00 0 0.00
[5,] 0 0 0.00 0 0.00
[6,] 0 0 0.00 0 0.00