我正在尝试简化 R 中的任务。我有一个社区矩阵:
row.name species1 species2 species3 species4 .... species50
sample 1 1 6 156 4 1
sample 2 0 20 34 5 1
sample 3 3 7 23 0 7
....
sample 10 3 15 9 7 6
这些是原始数字
我试图编码(但无处可去)一种方法,通过该方法,我可以将样本/行中发生率> 10%的任何物种限制为9%。即在这个(组成)的例子中,似乎sample1 / species3可能需要加盖。
我希望将数据保存为原始计数/恢复原始计数。这是否可以在 R ?
中实现我已经意识到vegan
中的生态变换或等同于规范化/标准化数据,但它们不是我在这里所追求的。
我希望这是有道理的。如果没有,我可以再试一次。任何帮助都非常感激,但 R 仍然相当新。
答案 0 :(得分:1)
我会使用sweep()
,但请指定pmin
作为函数
取10%的较小值和实际值:
M <- read.table(header=TRUE, row.names = 'row.name',
text='row.name species1 species2 species3 species4 species50
sample_1 1 6 156 4 1
sample_2 0 20 34 5 1
sample_3 3 7 23 0 7
sample_10 3 15 9 7 6')
M <- as.matrix(M)
sweep(M, 1, rowSums(M) %/% 10, pmin)