@@ -8,6 +8,7 @@ particularly a Vector or CategoricalVector.
8
8
9
9
```julia
10
10
DataFrame(columns::Vector, names::Vector{Symbol}; makeunique::Bool=false)
11
+ DataFrame(columns::Matrix, names::Vector{Symbol}; makeunique::Bool=false)
11
12
DataFrame(kwargs...)
12
13
DataFrame(pairs::Pair{Symbol}...; makeunique::Bool=false)
13
14
DataFrame() # an empty DataFrame
@@ -20,7 +21,7 @@ DataFrame(ds::Vector{Associative})
20
21
21
22
**Arguments**
22
23
23
- * `columns` : a Vector with each column as contents
24
+ * `columns` : a Vector with each column as contents or a Matrix
24
25
* `names` : the column names
25
26
* `makeunique` : if `false` (the default), an error will be raised
26
27
if duplicates in `names` are found; if `true`, duplicate names will be suffixed
@@ -81,7 +82,8 @@ mutable struct DataFrame <: AbstractDataFrame
81
82
if length (columns) == length (colindex) == 0
82
83
return new (Vector {Any} (0 ), Index ())
83
84
elseif length (columns) != length (colindex)
84
- throw (DimensionMismatch (" Number of columns ($(length (columns)) ) and number of column names ($(length (colindex)) ) are not equal" ))
85
+ throw (DimensionMismatch (" Number of columns ($(length (columns)) ) and number of" *
86
+ " column names ($(length (colindex)) ) are not equal" ))
85
87
end
86
88
lengths = [isa (col, AbstractArray) ? length (col) : 1 for col in columns]
87
89
minlen, maxlen = extrema (lengths)
@@ -127,13 +129,20 @@ function DataFrame(; kwargs...)
127
129
end
128
130
end
129
131
130
- function DataFrame (columns:: AbstractVector ,
131
- cnames:: AbstractVector{Symbol} = gennames (length (columns));
132
+ function DataFrame (columns:: AbstractVector , cnames:: AbstractVector{Symbol} ;
132
133
makeunique:: Bool = false ):: DataFrame
134
+ if ! all (col -> isa (col, AbstractVector), columns)
135
+ # change to throw(ArgumentError("columns argument must be a vector of AbstractVector objects"))
136
+ Base. depwarn (" passing columns argument with non-AbstractVector entries is deprecated" , :DataFrame )
137
+ end
133
138
return DataFrame (convert (Vector{Any}, columns), Index (convert (Vector{Symbol}, cnames),
134
139
makeunique= makeunique))
135
140
end
136
141
142
+ DataFrame (columns:: AbstractMatrix , cnames:: AbstractVector{Symbol} = gennames (size (columns, 2 ));
143
+ makeunique:: Bool = false ) =
144
+ DataFrame (Any[columns[:, i] for i in 1 : size (columns, 2 )], cnames, makeunique= makeunique)
145
+
137
146
# Initialize an empty DataFrame with specific eltypes and names
138
147
function DataFrame (column_eltypes:: AbstractVector{T} , cnames:: AbstractVector{Symbol} ,
139
148
nrows:: Integer ; makeunique:: Bool = false ):: DataFrame where T<: Type
@@ -916,14 +925,7 @@ function Base.append!(df1::DataFrame, df2::AbstractDataFrame)
916
925
return df1
917
926
end
918
927
919
- function Base. convert (:: Type{DataFrame} , A:: AbstractMatrix )
920
- n = size (A, 2 )
921
- cols = Vector {Any} (n)
922
- for i in 1 : n
923
- cols[i] = A[:, i]
924
- end
925
- return DataFrame (cols, Index (gennames (n)))
926
- end
928
+ Base. convert (:: Type{DataFrame} , A:: AbstractMatrix ) = DataFrame (A)
927
929
928
930
function Base. convert (:: Type{DataFrame} , d:: Associative )
929
931
colnames = keys (d)
0 commit comments