我有一个具有不同尺寸的数据框列表。我想创建包含具有相同列数的数据框的不同替代子列表。
我的列表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
有人可以帮我解决这个问题吗?非常感谢提前
答案 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