【问题标题】:Use a separate dataframe to assign groups to another dataframe使用单独的数据框将组分配给另一个数据框
【发布时间】:2020-07-13 04:43:43
【问题描述】:

我目前正在处理标题是细胞样本名称的基因数据。每种类型的细胞收集 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)

但是那没有用,我被困在如何使数据与分组文件相对应。

注意:我之前上传了这个没有示例数据和代码的问题,它已关闭。我希望这足以很好地描述问题。

【问题讨论】:

    标签: r dataframe csv r-plotly


    【解决方案1】:

    首先让我们通过包含不同组中的样本来改进您的示例细胞样本数据:

    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 将样本和组组合在一起:

    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()
    

    【讨论】:

    • 您好 neilfws,感谢您的回复。当我说命名不一致时,我应该更好地澄清这一点,但我使用的样本名称是 [b05 Neutrophil1 Exp2, b07 Neutrophil3 Exp2, b10 Monocyte1 Exp2, b11 Monocyte2 Exp2, a01 brain microglia1 Exp1 m, a02 brain microglia2 Exp1 m, a06腹膜 Mac1 Exp1 m, a07 腹膜 Mac2 Exp1 m, b08 Spleen Mac1 Exp2, b09 Spleen Mac2 Exp2, b04 Kupffer Exp2, b15 Kupffer2 Exp2, a12 LI Mac2 Exp1 m, a13 LI Mac3 Exp1 m, a10 SI Mac3 Exp1 m, a11 SI Mac4 exp1 m, b02 肺 Exp2, b17 肺 mac2 Exp2,所以去掉数字后缀的方法不起作用。
    • 对不起,忘记在最后一个样本名后面加括号,但是lung mac2 exp2后面应该有一个。
    • 好吧,也许您可​​以找到一种使用mutate 的方法来处理您的示例名称。如果您想要有效的解决方案,请务必使用看起来像您的真实数据的示例数据。
    猜你喜欢
    • 2021-04-27
    • 1970-01-01
    • 2021-10-21
    • 2016-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    相关资源
    最近更新 更多