我有一个具有不同维度的数据框列表。我想创建不同的替代子列表,其中包含具有相同列数的数据框。
我的列表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/