我试图确定哪些行具有唯一性(一种只在我的物种矩阵中的那一行中被观察到,而在我的物种矩阵中的任何其他行中没有被观察到的物种).我设置了数据矩阵,其中列作为个体物种,行作为个体采样单位(在我们的例子中,横断面).

例如,假设物种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))

try 使用ChatGPT,但毫无进展,我能够通过Excel计算出数据集确实具有唯一性. 我还想出了如何让R告诉我哪些物种只被发现过一次,但我更感兴趣的是哪一行(横断面)have个独特的,有多少,而不是哪些物种是独特的.

另外,有没有一种方法可以列出所有行和唯一项的数量?对于示例数据,它将是0,0,2,0,1.我感兴趣的是哪些行也没有唯一性(0唯一性).

推荐答案

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

您可以通过首先查找哪些物种是唯一的,然后使用which(..., ind.arr = TRUE)来查找具有唯一值的那些物种的行索引和列索引:

uniques <- vapply(example_data, \(x) sum(x !=0) == 1, logical(1L))

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

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

#            row col
# Species3   3   1
# Species4   5   2
# Species5   3   3

你可以通过table查到有多少:

table(rowcol_uniques[,1])

# 3 5 
# 2 1 

在您的编辑中,您提到了您感兴趣的也没有唯一性的行-为此,您可以 Select merge,这将创建第二列Freq,该列标识所有行的每行唯一性的数量:

anyuniques <- merge(data.frame(row = seq_len(nrow(example_data))), 
                    as.data.frame(table(row = rowcol_uniques[,1])), 
                    all.x = TRUE)
anyuniques[is.na(anyuniques)] <- 0

#   row Freq
# 1   1    0
# 2   2    0
# 3   3    2
# 4   4    0
# 5   5    1

R相关问答推荐

更新合适的R mgcv::bam模型报告无效类型(关闭).'';错误

如何求解arg必须为NULL或deSolve包的ode函数中的字符向量错误

获取列中值更改的行号

使用data.table::fcase()而不是dplyr::case_When()时保持值

R -在先前group_by级别汇总时获取最大大小子组的计数

根据纬度和距离连接两个数据集

使用来自嵌套列和非嵌套列的输入的PURRR:MAP和dplyr::Mariate

R -基线图-图形周围的阴影区域

R中治疗序列的相对时间指数

判断函数未加载R中的库

使用ggplot2绘制具有边缘分布的坡度图

如何合并不同列表中的数据文件,包括基于名称的部分匹配,而不是一对一等价

排序R矩阵的行和列

如何在刻面和翻转堆叠条形图中对齐geom_text()

将仪表板中的值框大小更改为Quarto

汇总数据:在跨越()all_of()Dynamic_list_of_vars=>;所选内容不能有缺失值的汇总()中出错

如何将两个用不同的运算符替换*的矩阵相乘

如何从矩阵绘制环弦图

按顺序将地块添加到列表

向数据添加标签