我正在做一系列復雜的資料操作,在這樣做的程序中,我從一個“源”資料幀創建了一系列資料幀,并動態命名我所有的“子集”資料幀。它們都具有相同的結構(列),我想將它們系結在一起。
我面臨的挑戰是,在我動態命名/創建這些資料幀后,我似乎無法立即獲得系結語法。
因此,為了創建我的“子集”資料幀,我將所需的資料放入一個名為的資料幀中df_master
,并使用assign
. 我在 for 回圈內執行此操作,因此最終得到 10 個子集資料幀。偽代碼如下所示:
for (i in 1:10){
.... do some stuff ...
master_df <- save into a df
assign(paste0("df_months_", i), df_master) # dynamically (re) name df_master
}
這作業得很好,我把我的10名dataframes的名字df_months_1
,df_months_2
等
當我想系結時,麻煩就來了。 這篇文章建議使用do.call
. 為了做到這一點,我需要將我的“子集”資料框放在一個串列中,然后使用do.call
and rbind
。這是我做對不了的部分。我想我需要一個子集資料幀本身的串列。但我似乎無法創建該串列。
根據我需要的鏈接解決方案:
new_df <- do.call("rbind", list(df_months_1, df_months_2, ...)
鑒于我正在動態創建名稱,不確定如何創建該串列。
uj5u.com熱心網友回復:
由于我們在全域 env 中創建了多個物件(不推薦),請ls
使用regex
as檢查全域 env 中的這些物件pattern
ls(pattern = "^df_months_\\d $")
它回傳一vector
組與模式匹配的物件名稱 -df_months_
從^
字串的開頭 ( ) 后跟一個或多個數字 ( \\d
) 到$
字串的結尾 ( )
現在,我們get
了解物件的值。對于>=1
物件,使用mget
which 回傳一個鍵/值對作為命名的list
。
mget(ls(pattern = "^df_months_\\d $"))
然后,我們使用rbind
insidedo.call
來系結元素list
do.call(rbind, mget(ls(pattern = "^df_months_\\d $")))
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/397804.html
上一篇:R中資料幀的for回圈
下一篇:在Shiny中渲染圖形時出現延遲