通过减少总和来规范化数据

时间:2016-09-15 13:57:12

标签: r normalization

我想通过随机减少每个列中现在不同的总和来逐列化数据(由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,因为物种编号不能为负数。我很感激任何想法!

1 个答案:

答案 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。