2016-02-12 69 views
2

我有一個具有不同維度的數據幀列表。我想創建包含具有相同列數的數據框的不同替代子列表。根據數據幀的維度在數據幀列表中創建一個子列表

我的名單df_list的結構看起來是這樣的:

名單的6

$ df1:'data.frame': 49743 obs. of 88 variables 
    $ df2:'data.frame': 49889 obs. of 89 variables 
    $ df3:'data.frame': 50500 obs. of 91 variables 
    $ df4:'data.frame': 49732 obs. of 88 variables 
    $ df5:'data.frame': 48500 obs. of 90 variables 
    $ df6:'data.frame': 50011 obs. of 91 variables 

我所需的輸出將類似於:

sub_list1 = list(df1, df4) 
sub_list2 = list(df3, df6) 

誰能幫我解決這個問題?提前

+0

謝謝。我想根據數據幀列表中每個數據幀的列數進行子集分類,因爲我的列表包含多於6個數據幀。 – Edu

回答

2

非常感謝它使用

split(df_list, lengths(df_list)) 
# or for older R versions: split(df_list, sapply(df_list, ncol)) 

,這將導致列表的新列表很容易解決,每個子列表包含data.frame與列的數量相等。


這裏有一個重複的例子:

l <- list(
    data.frame(x = 1), 
    data.frame(x = 1, y = 2), 
    data.frame(x = 1), 
    data.frame(x = 1, y = 2, z = 3), 
    data.frame(x = 1)) 

要檢查多少變量l每個data.frame已運行:

lengths(l) 
#[1] 1 2 1 3 1 

現在你可以將它們分割,並檢查結構:

res <- split(l, lengths(l)) 
str(res) 
#List of 3 
# $ 1:List of 3 
# ..$ :'data.frame': 1 obs. of 1 variable: 
# .. ..$ x: num 1 
# ..$ :'data.frame': 1 obs. of 1 variable: 
# .. ..$ x: num 1 
# ..$ :'data.frame': 1 obs. of 1 variable: 
# .. ..$ x: num 1 
# $ 2:List of 1 
# ..$ :'data.frame': 1 obs. of 2 variables: 
# .. ..$ x: num 1 
# .. ..$ y: num 2 
# $ 3:List of 1 
# ..$ :'data.frame': 1 obs. of 3 variables: 
# .. ..$ x: num 1 
# .. ..$ y: num 2 
# .. ..$ z: num 3 
+2

非常感謝。這是我正在尋找的。 – Edu

+0

@Edu不客氣。你可能還想指出我是如何爲你的未來問題做出一個小的可重複的例子 –

+0

這是一個很好的使用'長度' – akrun

相關問題