2014-09-06 75 views
0

假設我有幾個數據R迴路在數據幀來創建新的dataframes

dfx01=data.frame(city=c("a","b","c","d"),yr=c(2000,2001,2003,2002)) 
dfx02=data.frame(city=c("a","e","c","d"),yr=c(2000,2001,2005,2002)) 
dfx012=data.frame(city=c("f","b","c","d"),yr=c(2000,2000,2001,2002)) 
dfx022=data.frame(city=c("f","b","c","g"),yr=c(2002,2000,2003,2001)) 

我應該如何輸出相應的數據幀X01,X02,X012幀,X022是子集僅年= 2001?

我lapply

dflist=list(dfx01,dfx02,dfx012,dfx022) 
lapply(dflist, fun(x){subset(x,startyr=2000)}) 

但如何命名4個新的數據幀X01,X02,X012,X022企圖?謝謝。

回答

0

你的電話只需稍作改動即可。嘗試

lapply(dflist, subset, yr == 2000) 

但我更喜歡[子集,因爲subset可以有意外的結果。以下是如何做到這一點,並在同一時間添加新名稱。要設置與您的數據框名稱類似的名稱,最好先將名稱添加到列表中。

> dflist <- setNames(dflist, grep("dfx0", ls(), value = TRUE)) 
> setNames(lapply(dflist, function(x) x[x$yr==2001, ]), 
        gsub("df", "", names(dflist))) 
# $x01 
# city yr 
# 2 b 2001 
# 
# $x012 
# city yr 
# 2 e 2001 
# 
# $x02 
# city yr 
# 3 c 2001 
# 
# $x022 
# city yr 
# 4 g 2001 
+0

謝謝,這個作品很棒。另一個問題是,不是命名輸出df1-4,我想使用原始名稱的最後幾個字符,如dfx01,如果新的df命名爲x01,那將會很好。我該怎麼做? – santoku 2014-09-06 07:07:22

+0

和子集會得到什麼樣的意外結果? – santoku 2014-09-06 07:07:47

+0

@santoku - 我更新瞭如何添加你想要的名字 – 2014-09-06 07:18:55