我想通过随机减少每个列中现在不同的总和来逐列化数据(由ID和具有物种数量的样本组成),以在每列中达到100的总和。以下是表格的示例:
ID S1 S2 S3
1 1 0 0 3
2 2 0 0 0
3 3 5377 6140 7668
4 4 288 416 1121
5 5 876 786 1979
6 6 407 522 3792
仅应考虑值> 0,因为物种编号不能为负数。我很感激任何想法!
答案 0 :(得分:1)
您没有解释为何可能存在负面数据或如何处理这些数据。通常我会做
expl <- data.frame(ID = 1:6,
S1 = c(0,0,5377,288,876,407),
S2 = c(0,0,6140,416,786,522),
S3 = c(3,0,7668,1121,1979,3792))
norm.expl <- apply(expl,2, function(row) row/sum(row)*100)
print(norm.expl)
但可能存在负面数据
expl <- data.frame(ID = 1:6,
S1 = c(0,0,5377,288,876,407),
S2 = c(0,0,6140,416,786,522),
S3 = c(3,0,7668,1121,1979,3792),
S4 = c(-1,-2,-3,100,0,100))
norm.expl2 <- apply(expl,2,function(row) {row <- row * (row>0); row/sum(row)*100})
print(norm.expl2)
将以前的neagtive值设置为0。