2016-02-12 54 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

相关问题