如何压缩和重组R中的数据?
对不起,问题的标题很模糊,但我真的不知道如何简洁地解释这个问题。 我有一些分类(生物学)数据 总共有5个样本,其中包含在其中发现的不同种类细菌的数量。每一物种都被分为门(宽)、纲、目和科(窄)。对于每一个类群,例如门,我试图找到每个样本中属于该门的物种总数 例如:在样本1中,有如何压缩和重组R中的数据?,r,R,对不起,问题的标题很模糊,但我真的不知道如何简洁地解释这个问题。 我有一些分类(生物学)数据 总共有5个样本,其中包含在其中发现的不同种类细菌的数量。每一物种都被分为门(宽)、纲、目和科(窄)。对于每一个类群,例如门,我试图找到每个样本中属于该门的物种总数 例如:在样本1中,有0+0+0+0+0+7+0+6+0=13种被分类为“酸杆菌”,然后是一些“放线杆菌”,等等。我如何计算这些总数,然后将它们存储到其他地方,以便以后可以制作百分比堆叠条形图,就像我手工制作的那样 我对那部分没有问题;我的
0+0+0+0+0+7+0+6+0=13
种被分类为“酸杆菌”,然后是一些“放线杆菌”,等等。我如何计算这些总数,然后将它们存储到其他地方,以便以后可以制作百分比堆叠条形图,就像我手工制作的那样
我对那部分没有问题;我的主要问题是弄清楚如何重新排列数据
基本上,我尝试为门、类、顺序和族创建不同的数据集,并从每个数据集创建条形图。我被告知dplyr软件包可能会有所帮助。我对它不是很熟悉,但看了之后,我不知道这些函数会有什么帮助。我还考虑过制作几个for循环,可以对每个门等中的数据进行汇总,但是当您移动到更具体/更狭窄的分类群时,类别太多了。这有帮助吗
library(dplyr)
library(tidyr)
library(ggplot2)
phylum <- data %>%
group_by(phylum) %>%
summarise(sample_1_sum = sum(sample1),
sample_2_sum = sum(sample2),
sample_3_sum = sum(sample3)) %>%
pivot_longer(cols = c(sample_1_sum, sample_2_sum, sample_3_sum),
names_to = "Sample",
values_to = "Values")
ggplot(data = phylum, aes(x = Sample, y = Values)) +
geom_bar(aes(fill = phylum), position = "fill", stat = "identity")
库(dplyr)
图书馆(tidyr)
图书馆(GG2)
门%
分组依据(门)%>%
总结(样本1\u总和=总和(样本1),
样本2之和=总和(样本2),
样本3_sum=sum(样本3))%>%
枢轴长度(cols=c(样本1之和、样本2之和、样本3之和),
name_to=“Sample”,
价值_to=“价值”)
ggplot(数据=门,aes(x=样本,y=值))+
geom_bar(aes(fill=门),position=“fill”,stat=“identity”)
数据是您的数据集。如果你有很多样本列要处理,我会用不同的方法来处理,但只要有几个列,这是可行的
结果:
您提供的代码很有效,非常感谢您-但是%>%的目的是什么?我快速搜索了一下,结果有点混乱。这就是所谓的
管道。在最简单的层次上,您可以如下所示:假设您有两个函数f(x)
和g(x)
。然后x%>%f%>%g
相当于g(f(x))
。因此,我们从对象x
开始,然后在x
上应用函数f()
。该操作产生的对象随后被传递到函数g()
。这就好像您将数据从左侧函数“管道”到右侧函数。当然,真正的管道更复杂。它允许您编写优雅且易于阅读的代码。互联网上有很多参考资料。pipe
在magrittr
软件包中的R中流行,后来被tidyverse
吸收。tidyverse网站的magrittr页面上有一篇有见地的文章:
library(dplyr)
library(tidyr)
library(ggplot2)
phylum <- data %>%
group_by(phylum) %>%
summarise(sample_1_sum = sum(sample1),
sample_2_sum = sum(sample2),
sample_3_sum = sum(sample3)) %>%
pivot_longer(cols = c(sample_1_sum, sample_2_sum, sample_3_sum),
names_to = "Sample",
values_to = "Values")
ggplot(data = phylum, aes(x = Sample, y = Values)) +
geom_bar(aes(fill = phylum), position = "fill", stat = "identity")