我有上千个 Dataframe ,想把它们的名字grep成一个字符向量。然后用这个向量完成rbind函数。有什么建议吗?
dat1lkq6 <- data.frame(color = c('COLOR: RED', 'COLOR: RED', 'COLOR: BLUE', 'COLOR: GREEN', 'COLOR: BLUE'))
dat1ah2 <- data.frame(style = c('SPORTY', 'HYBRID', 'FORMAL', 'CASUAL', 'CASUAL'))
dat29fg <- data.frame(color = c('COLOR: RED', 'COLOR: CYAN', 'COLOR: BLUE', 'COLOR: RED', 'COLOR: BLUE'))
dat2xl <- data.frame(color = c('COLOR: RED', 'COLOR: CYAN', 'COLOR: BLUE', 'COLOR: RED', 'COLOR: BLUE'))
dat3g49 <- data.frame(color = c('COLOR: PURPLE', 'COLOR: RED', 'COLOR: BLUE', 'COLOR: GREEN', 'COLOR: BLUE'))
skus4 <- data.frame(sku = c('SKU: 1849354', 'SKU: 392856', 'SKU: 921385', 'SKU: 6395474', 'SKU: 8532449', 'SKU: 0285468', 'SKU: 2948327'))
#grep to get only "dat" dataframe names
all_dat_df <- base::ls(all.names = TRUE)[base::grep("^dat", base::ls(all.names = TRUE))]
#want to stack all the "dat" df's into one df, but not working
#result dataframe should have 25 rows
rbind(all_dat_df)
#tried various incarnations of dput, gsub, paste, noquote to no success
3条答案
按热度按时间0md85ypi1#
使用
grep()
和value = TRUE
获取匹配的对象名称。然后使用mget()
从环境中获取关联的 Dataframe 列表。最后,您可以使用dplyr::bind_rows()
或可能的do.call(rbind)
合并成一个。我使用
dplyr::bind_rows()
是因为它可以处理 Dataframe 中列名不同的情况,如示例数据中的情况,如果列 * 没有 * 不同,并且您更喜欢基本R解决方案,则可以使用do.call(rbind)
。niknxzdl2#
您可以将
ls
中的pattern
设置为^dat
,以仅获取以dat
开头的值。wnvonmuf3#
首先,使用grep()函数获取保存data.frame的所有对象的名称,就像您已经在做的那样:
现在,
all_dat_df
对象是一个字符向量,它包含一个对象名列表。但这些只是对象的名称,它没有引用这个对象的“位置”,它拥有的“什么”值等。所以你需要将这些名称转换为你想要合并的对象/数据.frames的实际引用。为此,你要求R使用
lapply()
函数将这些对象收集到列表中。lapply()
函数将get()
函数应用于all_dat_df
中的每个对象名称。此get()
函数将获取您使用对象名称引用的对象的实际引用。lapply()
将仅将get()
的结果存储在R列表中。之后,你只需要在你收集的data.frames列表上应用
dplyr::bind_rows()
函数:现在,
big_data_frame
对象包含一个data.frame,其中包含grep()
在全局环境中找到的所有data. frame中的所有行。**注意:**要使用
dplyr::bind_rows()
函数,您需要在计算机中安装dplyr
软件包。如果您没有安装此软件包,请使用下面的代码安装它: