【问题标题】:Match column names with another dataframe and split into separate dataframes将列名与另一个数据框匹配并拆分为单独的数据框
【发布时间】:2021-04-27 01:33:34
【问题描述】:

我有一个如下所示的数据框 (df):

tex21.222   chic56.345  wa34.907
0.5         0.6         1.12
0.8         1.2         0.9

我想根据另一个名为 keys 的数据帧将这个数据帧划分为单独的数据帧,如下所示:

site_name   sample_name
tex_1       tex21.222
tex_1       tex23.234
chic_1      chic56.345 
wa_1        wa34.907
wa_2        wa24.277

对于df 的每一列,我想(1)将列名与keys 中的sample_name 匹配以获得site_name,(2)从@ 移动所有具有相同site_name 的列987654330@ 到单独的数据帧中。

所以,最后,我希望拥有单独的数据框,其中所有列都在 tex_1 内,所有列在 chic_1 内等等。

我该怎么做?

【问题讨论】:

    标签: r


    【解决方案1】:

    使用merge + stack + split 的基本 R 选项

    u <- merge(stack(df1), df2, by.x = "ind", by.y = "sample_name")
    split(u[c("ind", "values")], u$site_name)
    

    给予

    $chic_1
             ind values
    1 chic56.345    0.6
    2 chic56.345    1.2
    
    $tex_1
            ind values
    3 tex21.222    0.5
    4 tex21.222    0.8
    
    $wa_1
           ind values
    5 wa34.907   1.12
    6 wa34.907   0.90
    

    【讨论】:

      【解决方案2】:

      尝试下一个代码:

      library(dplyr)
      library(tidyr)
      #Code
      data <- df %>% pivot_longer(everything()) %>%
        left_join(keys,by = c('name'='sample_name'))
      #Split
      List <- split(data,data$site_name)
      List <- lapply(List,function(x) {x$site_name<-NULL;x})
      list2env(List,envir = .GlobalEnv)
      

      输出:

      List
      $chic_1
      # A tibble: 2 x 2
        name       value
        <chr>      <dbl>
      1 chic56.345   0.6
      2 chic56.345   1.2
      
      $tex_1
      # A tibble: 2 x 2
        name      value
        <chr>     <dbl>
      1 tex21.222   0.5
      2 tex21.222   0.8
      
      $wa_1
      # A tibble: 2 x 2
        name     value
        <chr>    <dbl>
      1 wa34.907  1.12
      2 wa34.907  0.9 
      

      【讨论】:

      • 这正是我想要的,谢谢:)
      • @fifigoblin 总是很高兴帮助你!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-11
      • 1970-01-01
      • 1970-01-01
      • 2015-11-14
      • 1970-01-01
      • 1970-01-01
      • 2020-05-23
      相关资源
      最近更新 更多