根据其他 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 创建
我正在处理 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 创建