根据其他 3 列对列中的值求和时的值不正确

Incorrect values when summing values in a column according to other 3 columns

我正在处理 phyloseq 对象的输出文件。我计算了 rel.abundance 并提取了我感兴趣的列,如下所示: 这就是我计算 rel_abund

的方法
dat <- read_excel("selected_data.xlsx")%>% group_by(OTU)%>% mutate(rel_abund = Abundance/sum(Abundance))
dat

OTU 丰度样本 ID 基因型 rel_abund ASV2 4988 P35 基因型 1 0.2801617614 ASV4 3894 1P-GH-R2 基因型 2 0.9660133962 ASV7 3681 P53 基因型 1 0.5047305636 ASV3 2149 P16 基因型 4 0.3943842907

然后我需要计算每个基因型中每个 ASV 的相对丰度总和。每个基因型由 1-5 个样本表示,根据它们在样本中的出现,我有 44 个 ASV,共 2,464 行

为了显示每个 ASV 及其 rel_abund 跨基因型(包括 sampleID),我尝试了这个

dat %>%
  count(OTU, SampleID, rel_abund, Genotype) %>%
  pivot_wider(names_from = SampleID, values_from = n)

结果

OTU rel_abund 基因型 1P-R1 1P-R2 P1 ...... ASV1 0.0000000000 基因型 11 1 1 NA NA NA NA NA
ASV1 0.0000000000 基因型 2 NA NA 1 NA NA NA NA

那么,

dat %>%
  group_by(OTU, Genotype) %>%
  summarize(Summed_rel_abund = sum(rel_abund >= 0, na.rm = TRUE)) 

给出:

OTU基因型求和_rel_abund ASV1 基因型 1
ASV1 基因型 3 3
ASV1 基因型 2 1
ASV1 基因型 5 3
ASV1 基因型 6 2
ASV10 基因型 7 5
ASV10 基因型 8 5

我不知道总和是整数,总和是小数。我怀疑最后一步,我需要更正,拜托! 谢谢

目前,sum(rel_abund >= 0) 正在对 >= 0 测试的 TRUE 值求和,将每个值计为 1,因此实际上只是在计数。要对值 >= 0 的值求和,请尝试 sum(rel_abund[rel_abund >= 0], na.rm = TRUE):

dat %>%
  group_by(OTU, Genotype) %>%
  summarize(Summed_rel_abund = sum(rel_abund[rel_abund >= 0], na.rm = TRUE)) 

#> # A tibble: 4 x 3
#> # Groups:   OTU [4]
#>   OTU   Genotype  Summed_rel_abund
#>   <chr> <chr>                <dbl>
#> 1 ASV2  genotype1            0.280
#> 2 ASV3  genotype4            0.394
#> 3 ASV4  genotype2            0.966
#> 4 ASV7  genotype1            0.505

reprex package (v2.0.1)

于 2022-03-18 创建