Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dataframe 将子数据帧转换为数据帧?_Dataframe_Julia - Fatal编程技术网

Dataframe 将子数据帧转换为数据帧?

Dataframe 将子数据帧转换为数据帧?,dataframe,julia,Dataframe,Julia,我有一个创建子数据帧的by。如何将它们转换为数据帧,最好是不进行复制 我最初的问题是无法向子数据帧添加新列: # df[:End] = 1:nrow(merged_islands) # ERROR: LoadError: Cannot assign to non-existent column: End # insert!(df, length(df), Array(1:nrow(merged_islands)), :End) # ERROR: LoadError: MethodError:

我有一个创建子数据帧的
by
。如何将它们转换为数据帧,最好是不进行复制

我最初的问题是无法向子数据帧添加新列:

# df[:End] = 1:nrow(merged_islands)
# ERROR: LoadError: Cannot assign to non-existent column: End

# insert!(df, length(df), Array(1:nrow(merged_islands)), :End)
# ERROR: LoadError: MethodError: no method matching insert!(::SubDataFrame{Array{Int64,1}}, ::Int64, ::Array{Int64,1}, ::Symbol)

我猜将其转换为数据帧是最简单的方法:)

一个有趣的问题。在当前主机上(很快将被标记),写
DataFrame(sdf)
就足够了,其中
sdf
子数据帧。它将创建所有向量的副本

以下是一个解决方案,它将创建一个
数据框
,其中包含
子数据框
中所有向量的
视图
(它应该在主版本和当前标记的版本上都有效):

(我使用
AbstractVector
容器类型,因为它在当前主机上会更快)

当数据框至少包含一个
视图
列时,您将无法向该数据框添加行


编辑:作为旁注(也许这最终是你的问题)。如果您有
sdf
这是一个
子数据框
,它的父项是
df
这是一个
数据框
,那么如果您向
df
添加列,它们将立即在
sdf
中可见,因为
子数据框
仅选择行并从父项继承所有列。

次要问题:您真的这样做吗是否需要在
中添加列?这听起来很不寻常。您只需返回带有新列的
DataFrame
,并让它们与最后的分组列自动组合。@MilanBouchet Valat您是正确的。这是没有必要的。
function sdf2df(sdf::SubDataFrame)
    p = parent(sdf)
    sel = DataFrames.rows(sdf)
    DataFrame(AbstractVector[view(p[i], sel) for i in 1:ncol(sdf)],
              names(sdf))
end