簡體   English   中英

如何列出我的全局環境中的所有數據框?

[英]How can I make a list of all dataframes that are in my global environment?

我試圖在他們身上使用rbind 但是我需要一個已經存在於我的全局環境中的所有dataframes的列表。 我該怎么做?

代碼我用來導入目錄中的20個csv文件。 基本上,必須組合成單個數據幀。

temp = list.files(pattern = "*.csv")
for (i in 1:length(temp)) assign(temp[i], read.csv(temp[i]))

此函數應返回一個包含所有data.frames作為元素的正確列表

dfs <- Filter(function(x) is(x, "data.frame"), mget(ls()))

然后你可以用它們來對抗它們

do.call(rbind, dfs)

當然,這是非常愚蠢的,有一堆data.frames躺在附近被如此相關,使得你要的rbind他們。 聽起來他們可能應該首先列入清單。

我建議你遠離assign() ,這總是一個跡象,事情可能會發生沖突。 嘗試

temp <- list.files(pattern="*.csv")
dfs <- lapply(temp, read.csv)

應該立即返回一個列表。

從您發布的代碼中,我建議您啟動一個新的R會話,並使用以下代碼再次讀取文件

do.call(rbind, lapply(list.files(pattern = ".csv"), read.csv))

這是MentatOfDune的答案略有改進,它沒有捕獲具有多個類的data.frames:

ls()[grepl('data.frame', sapply(ls(), function(x) class(get(x))))]

ls函數列出了環境中的所有內容。 get函數獲取具有給定名稱的變量。 您可以使用class函數來獲取變量的類。

如果你把它們放在一起,你可以這樣做:

ls()[sapply(ls(), function(x) class(get(x))) == 'data.frame']

這將返回當前環境中data.frames的字符向量。

如果在全局環境中只有data.frames具有相同數量的列和列名,則以下內容應該有效(非data.frame對象無關緊要):

do.call(rbind, eapply(.GlobalEnv,function(x) if(is.data.frame(x)) x))

為了改善MentatOfDune的答案(順便說一句好的用戶名):

ls()[sapply(ls(), function(x) any(class(get(x)) == 'data.frame'))]

甚至更強大:

ls()[sapply(ls(), function(x) any(is.data.frame(get(x))))]

這也支持tibbles(例如用dplyr創建),因為它們包含多個類,其中data.frame就是其中之一。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM