如何计算 R 中物种矩阵中的一行中唯一的数量?

问题描述 投票:0回答:1

我正在尝试确定哪些行具有唯一性(仅在该行中观察到的物种,而不是在我的物种矩阵的任何其他行中观察到的物种)。我设置了数据矩阵,其中列作为独立物种,行作为独立采样单位(在我们的例子中为横断面)。

例如,物种 1 仅在第 8 行中找到,而在数据集中的其他位置没有找到,那么我想知道第 8 行包含 1 个唯一物种。如果物种 4 也只在第 8 行中发现,那么唯一物种的数量将为 2 等。注意:我在数据集中发现的一些唯一物种的丰度大于 1,这意味着它们在横断面上被发现的数量更多不止一次,但它们仍然只在那条样带中被发现(仍然被认为是唯一的)。

编辑添加:这里是一些示例数据,其中第 3 行有两个唯一值,第 5 行有 1 个唯一值

 example_data <- data.frame(Species1 = c(1, 2, 3, 4, 5),
                             Species2 = c(6, 7, 8, 9, 10),
                             Species3 = c(0, 0, 13, 0, 0),
                             Species4 = c(0, 0, 0, 0, 20),
                             Species5 = c(0, 0, 23, 0, 0))

尝试使用 ChatGPT 但无济于事,我能够通过 VIA excel 找出数据集确实具有唯一性。我还想出了如何让 R 告诉我哪些物种只被发现一次,但我更感兴趣的是哪些行(横断面)具有唯一性以及有多少个,而不是哪些物种是唯一的。

r vegan
1个回答
0
投票

因为您感兴趣的是哪些行具有唯一性以及有多少行,而不是哪些物种是唯一的:

您可以通过首先查找哪些物种是唯一的,然后使用

which(..., ind.arr = TRUE)
:

来查找具有唯一值的行和列索引
uniques <- colSums(apply(example_data[], 2, \(x) x > 0)) == 1

# Species1 Species2 Species3 Species4 Species5 
#    FALSE    FALSE     TRUE     TRUE     TRUE 

rowcol_uniques <- which(example_data[uniques] != 0, arr.ind = TRUE)

#     row col
# [1,]   3   1
# [2,]   5   2
# [3,]   3   3

您可以通过

table
找到有多少:

table(rowcol_uniques[,1])

# 3 5 
# 2 1 
© www.soinside.com 2019 - 2024. All rights reserved.