Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何压缩和重组R中的数据?_R - Fatal编程技术网

如何压缩和重组R中的数据?

如何压缩和重组R中的数据?,r,R,对不起,问题的标题很模糊,但我真的不知道如何简洁地解释这个问题。 我有一些分类(生物学)数据 总共有5个样本,其中包含在其中发现的不同种类细菌的数量。每一物种都被分为门(宽)、纲、目和科(窄)。对于每一个类群,例如门,我试图找到每个样本中属于该门的物种总数 例如:在样本1中,有0+0+0+0+0+7+0+6+0=13种被分类为“酸杆菌”,然后是一些“放线杆菌”,等等。我如何计算这些总数,然后将它们存储到其他地方,以便以后可以制作百分比堆叠条形图,就像我手工制作的那样 我对那部分没有问题;我的

对不起,问题的标题很模糊,但我真的不知道如何简洁地解释这个问题。 我有一些分类(生物学)数据

总共有5个样本,其中包含在其中发现的不同种类细菌的数量。每一物种都被分为门(宽)、纲、目和科(窄)。对于每一个类群,例如门,我试图找到每个样本中属于该门的物种总数

例如:在样本1中,有
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")