使用单独的数据框将组分配给另一个数据框

时间:2020-07-13 04:43:43

标签: r dataframe csv r-plotly

我目前正在处理标头为细胞样品名称的遗传数据。从每种类型的细胞中收集了2个样品,需要将它们绘制在箱形图中。由于样品命名不一致,我使用了一个单独的.csv文件,用户在其中写入样品名称及其所属的组。我正在尝试使用group_by()函数来访问示例数据,然后使用其他.csv文件中的分组信息。有什么方法可以完成我想做的事情?

Cell Sample Data CSV:                     
Sample A1         Sample A2    Sample B1     Sample B2
1                 3            3             5
Grouping CSV
Samples           Group     
Sample A          1           
Sample B          1           
Sample C          2
Sample D          2

我目前的想法是做这样的事情

library(dplyr)
groupFile <- data %>% group_by(groupFile$Group)

但是那没有用,我一直坚持如何使数据与分组文件相对应。

注意:我以前没有包含示例数据和代码就上传了这个问题,该问题已关闭。我希望这足以说明问题。

1 个答案:

答案 0 :(得分:0)

首先,我们通过包含不同组中的样本来改进示例单元样本数据:

celldata <- structure(list(`Sample A1` = 1L, `Sample A2` = 3L, `Sample B1` = 3L, 
                           `Sample B2` = 5L, `Sample C1` = 6L, `Sample C2` = 7L), 
                      class = "data.frame", row.names = c(NA, -1L))

以及您的组数据:

groupdata <- structure(list(Samples = c("Sample A", "Sample B", "Sample C", "Sample D"), 
                            Group = c(1L, 1L, 2L, 2L)), class = "data.frame", 
                            row.names = c(NA, -4L))

使用“长”格式的数据而不是宽数据,并且所有内容都在一个数据框中,生活会容易得多。

我们可以使用tidyr::gather重塑单元格数据的形状,然后使用dplyr::mutate获得不带数字后缀的Samples,最后使用dplyr::left_join将样本和组组合在一起:< / p>

library(dplyr)
library(tidyr)

celldata %>% 
  gather(Sample, Value) %>% 
  mutate(Samples = gsub("\\d+", "", Sample)) %>% 
  left_join(groupdata)

结果:

     Sample Value  Samples Group
1 Sample A1     1 Sample A     1
2 Sample A2     3 Sample A     1
3 Sample B1     3 Sample B     1
4 Sample B2     5 Sample B     1
5 Sample C1     6 Sample C     2
6 Sample C2     7 Sample C     2

现在您可以在Group上分组了。根据下一步要执行的操作,您可能需要将Group转换为因子。而且,如果您使用的是ggplot2,则可能甚至不需要group_by

例如:

library(ggplot2)

celldata %>% 
  gather(Sample, Value) %>% 
  mutate(Samples = gsub("\\d+", "", Sample)) %>% 
  left_join(groupdata) %>% 
  mutate(Group = factor(Group)) %>% 
  ggplot(aes(Group, Value)) + 
  geom_boxplot() + 
  geom_jitter(aes(color  = Samples)) + 
  theme_bw()

enter image description here