根据数据框的维度在数据框列表中创建子列表

时间:2016-02-12 17:23:32

标签: r subset nested-lists

我有一个具有不同尺寸的数据框列表。我想创建包含具有相同列数的数据框的不同替代子列表。

我的列表TypeError: Setting <class 'pandas.core.index.Float64Index'> dtype to anything other than float64 or object is not supported 的结构如下所示:

6个清单

df_list

我想要的输出类似于:

  $ 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

有人可以帮我解决这个问题吗?非常感谢提前

1 个答案:

答案 0 :(得分: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