我不确定这是一个实际问题还是我只是没有以正确的方式做某事,但此刻对我来说似乎有些奇怪。
使用DataFrames时遇到一个问题,如果您将DataFrame
复制到另一个变量,则对两个变量中的任何一个进行的更改都会同时更改。这也适用于各个列。例如:
julia> x = DataFrame(A = ["pink", "blue", "green"], B = ["yellow", "red", "purple"]);
julia> y = x;
julia> x[x.A .== "blue", :A] = "red";
julia> x
3×2 DataFrame
│ Row │ A │ B │
├─────┼───────┼────────┤
│ 1 │ pink │ yellow │
│ 2 │ red │ red │
│ 3 │ green │ purple │
julia> y
3×2 DataFrame
│ Row │ A │ B │
├─────┼───────┼────────┤
│ 1 │ pink │ yellow │
│ 2 │ red │ red │
│ 3 │ green │ purple │
列也发生类似的情况,因此,如果要像上面那样设置DataFrame
,但是在将两者都合并到数据帧中之前先使用B = A
,那么如果列中的值是更改,另一个也会自动更改。
这对我来说似乎很奇怪,也许这是其他编程语言的功能,但是在备份数据表或在列之间交换数据时,我在R中做了很多与上述相同的事情,并且从未见过这个问题。所以问题是,它是否按设计工作,是否有在数据帧之间复制值的正确方法?
我使用的是Julia版本0.7.0,因为我最初是通过Manjaro存储库安装的1.0.0,并且在尝试构建Tk时遇到Is_windows()
问题。
答案 0 :(得分:1)
命令y = x
不会创建新对象;只会为相同的DataFrame
创建一个新的引用(或名称)。
您可以通过调用y = copy(x)
来创建副本。对于您而言,这仍然不起作用,因为它仅复制数据框本身,而不复制其中的变量。
如果您想要一个完全独立的新对象,可以使用y = deepcopy(x)
。在这种情况下,y
将没有对x
的引用。
请参阅此主题以进行更详细的讨论:
https://discourse.julialang.org/t/what-is-the-difference-between-copy-and-deepcopy/3918/2