Dataframe 使用数据框后保持变量类型
我试图使用R packageDataframe 使用数据框后保持变量类型,dataframe,julia,cluster-analysis,Dataframe,Julia,Cluster Analysis,我试图使用R packageclustMixType中的kproto()函数对Julia中的混合类型数据进行聚类,但是我在x中得到了错误没有数值变量!尝试使用包中的kmodes()。。我的数据应该有3个变量:2个连续变量和1个分类变量。似乎在我使用了DataFrame()之后,所有变量都变成了分类变量。在使用DataFrame()之后,有没有办法避免更改变量类型,这样我就可以使用混合类型的数据(连续的和分类的)来使用kproto() 我不知道关于R包的任何信息,也不知道它需要什么样的输入,但问题
clustMixType
中的kproto()
函数对Julia中的混合类型数据进行聚类,但是我在x中得到了错误没有数值变量!尝试使用包中的kmodes()。
。我的数据应该有3个变量:2个连续变量和1个分类变量。似乎在我使用了DataFrame()
之后,所有变量都变成了分类变量。在使用DataFrame()
之后,有没有办法避免更改变量类型,这样我就可以使用混合类型的数据(连续的和分类的)来使用kproto()
我不知道关于R包的任何信息,也不知道它需要什么样的输入,但问题可能是如何构造数据矩阵,而不是数据帧构造函数本身 将数字列和字符串列连接在一起时,Julia将返回结果矩阵的元素类型
Any
:
julia> g1=hcat(x1,x2,x3)
10×3 Matrix{Any}:
0.708309 -4.84767 "1"
0.566883 -0.214217 "1"
...
这意味着您的df0
矩阵是:
julia> #create the data
df0=vcat(g1,g2)
20×3 Matrix{Any}:
0.708309 -4.84767 "1"
0.566883 -0.214217 "1"
...
而DataFrame
构造函数只会传递这种类型信息的缺乏,而不是试图推断列类型
julia> DataFrame(df0)
20×3 DataFrame
Row │ x1 x2 x3
│ Any Any Any
─────┼───────────────────────────
1 │ 0.708309 -4.84767 1
2 │ 0.566883 -0.214217 1
...
解决此问题的一个简单方法是,不要将列连接到单个矩阵中,而是从列构造数据帧:
julia> DataFrame([vcat(x1, y1), vcat(x2, y2), vcat(x3, y3)])
20×3 DataFrame
Row │ x1 x2 x3
│ Float64 Float64 String
─────┼───────────────────────────────
1 │ 0.708309 -4.84767 1
2 │ 0.566883 -0.214217 1
...
如您所见,我们现在在生成的数据帧中有两个
Float64
数值列x1
和x2
。作为Nils的漂亮答案的补充(因为问题确实是在矩阵构造时,而不是在DataFrame
创建时),有以下小技巧:
julia> df = DataFrame([1 1.0 "1"; 2 2.0 "2"], [:int, :float, :string])
2×3 DataFrame
Row │ int float string
│ Any Any Any
─────┼────────────────────
1 │ 1 1.0 1
2 │ 2 2.0 2
julia> identity.(df)
2×3 DataFrame
Row │ int float string
│ Int64 Float64 String
─────┼────────────────────────
1 │ 1 1.0 1
2 │ 2 2.0 2
julia> df = DataFrame([1 1.0 "1"; 2 2.0 "2"], [:int, :float, :string])
2×3 DataFrame
Row │ int float string
│ Any Any Any
─────┼────────────────────
1 │ 1 1.0 1
2 │ 2 2.0 2
julia> identity.(df)
2×3 DataFrame
Row │ int float string
│ Int64 Float64 String
─────┼────────────────────────
1 │ 1 1.0 1
2 │ 2 2.0 2