我正在尝试确定哪些行具有唯一性(仅在该行中观察到的物种,而不是在我的物种矩阵的任何其他行中观察到的物种)。我设置了数据矩阵,其中列作为独立物种,行作为独立采样单位(在我们的例子中为横断面)。
例如,物种 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 告诉我哪些物种只被发现一次,但我更感兴趣的是哪些行(横断面)具有唯一性以及有多少个,而不是哪些物种是唯一的。
因为您感兴趣的是哪些行具有唯一性以及有多少行,而不是哪些物种是唯一的:
您可以通过首先查找哪些物种是唯一的,然后使用
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