我正在做一系列復雜的資料操作,在這樣做的程序中,我從一個“源”資料幀創建了一系列資料幀,并動態命名我所有的“子集”資料幀。它們都具有相同的結構(列),我想將它們系結在一起。
我面臨的挑戰是,在我動態命名/創建這些資料幀后,我似乎無法立即獲得系結語法。
因此,為了創建我的“子集”資料幀,我將所需的資料放入一個名為的資料幀中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.calland rbind。這是我做對不了的部分。我想我需要一個子集資料幀本身的串列。但我似乎無法創建該串列。
根據我需要的鏈接解決方案:
new_df <- do.call("rbind", list(df_months_1, df_months_2, ...)
鑒于我正在動態創建名稱,不確定如何創建該串列。
uj5u.com熱心網友回復:
由于我們在全域 env 中創建了多個物件(不推薦),請ls使用regexas檢查全域 env 中的這些物件pattern
ls(pattern = "^df_months_\\d $")
它回傳一vector組與模式匹配的物件名稱 -df_months_從^字串的開頭 ( ) 后跟一個或多個數字 ( \\d ) 到$字串的結尾 ( )
現在,我們get了解物件的值。對于>=1物件,使用mgetwhich 回傳一個鍵/值對作為命名的list。
mget(ls(pattern = "^df_months_\\d $"))
然后,我們使用rbindinsidedo.call來系結元素list
do.call(rbind, mget(ls(pattern = "^df_months_\\d $")))
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/397804.html
上一篇:R中資料幀的for回圈
下一篇:在Shiny中渲染圖形時出現延遲
