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

标签 r subset nested-lists

我有一个具有不同维度的数据框列表。我想创建不同的替代子列表,其中包含具有相同列数的数据框。

我的列表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)

谁能帮我解决这个问题吗?非常感谢提前

最佳答案

使用它很容易解决

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

关于r - 根据数据框的维度在数据框列表中创建子列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35368648/

相关文章:

r - 在 R 读取的数据文件中分配列名

java - subset sum 找到加起来等于一个数的所有子集

python - 在 numpy 数组中围绕定义的对角线设置递增值

r - 从标记数据创建带有标签的列

Shiny 应用程序中的 renderImage() 和 .svg

r - 将变量传递到 data.table

algorithm - 查询给定子集是否存在于集合集合中的数据结构

python - 列表列表更改意外地反射(reflect)在子列表中

python - 我有一个列表列表,我想按 10 分组

从 numericInput() 中删除向上/向下箭头 R Shiny