【问题标题】:R - rbind multiple dataframes in list based on pattern in dataframe nameR - 根据数据框名称中的模式在列表中绑定多个数据框
【发布时间】:2019-09-17 09:24:02
【问题描述】:

我有一个具有以下名称的数据框列表(列表)

names(list) <- c("prefix-001A","prefix-01B","prefix-001C","prefix-002A","prefix02B")

我想创建一个具有以下名称的新数据框列表:

new_list <- c("prefix-001","prefix-002")

“prefix-001”应该是一个数据帧,包含原始数据帧“prefix-001A”、“prefix01B”、“prefix-001C”中的所有行,因此那些包含“001”或“01”的数据帧他们的名字。

“prefix-002”应该是一个数据帧,包含原始数据帧“prefix-002A”和“prefix-02B”中的所有行,所以那些名称中包含“002”或“02”的数据帧。

我知道数据框可以与 rbind 合并(它们都有相同的列)。但我不知道如何为 rbind 选择正确的数据帧。

【问题讨论】:

    标签: r


    【解决方案1】:

    我们可以使用grepl (vals) 找出名称中包含"01" 的列表。然后我们创建一个新列表,一个包含所有vals 索引,另一个不包含它们并为它们分配名称。

    vals <- grepl("01", names(list_df))
    setNames(list(do.call(rbind, list_df[vals]), 
                  do.call(rbind, list_df[!vals])), new_list)
    

    【讨论】:

      【解决方案2】:

      我将首先从原始列表的子集创建两个新对象,并使用 dplyrbind_rows() 绑定原始列表中的 data.frames:

      df <- data.frame(A = 1, B = 2)
      
      list_df <- list(df, df, df, df, df)
      
      names(list) <- c("prefix-001A","prefix-01B","prefix-001C","prefix-002A","prefix02B")
      
      library(dplyr)
      "prefix-001" <- list[grep("prefix-00{0,1}1", names(list))] %>% 
        bind_rows()
      
      "prefix-002" <- list[grep("prefix-{0,1}00{0,1}2", names(list))] %>% 
        bind_rows()
      

      然后你可以将这两个对象组合成一个新的列表。

      new_list <- list(`prefix-001`, `prefix-002`)
      

      【讨论】:

        猜你喜欢
        • 2021-01-07
        • 2018-12-21
        • 2020-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-12
        • 1970-01-01
        • 2023-01-18
        相关资源
        最近更新 更多