2017-01-22 4 views
1

Когда я пытаюсь получить максимум разностей столбцов в DataFrame, я получаю сообщение об ошибке. Что не так?min/max при различиях столбцов DataFrame в Julia

using DataFrames 

a = [2,4,10,4,8,8] 
b = [5,9,7,2,8,7] 
c = [2,9,7,6,8,1] 

df = DataFrame(A = a, B = b, C = c) 
df[2,:A] = NA 
df[3,:C] = NA 

ab=df[:A] - df[:B] 
bc=df[:B] - df[:C] 
ac=df[:A] - df[:C] 

df[:max] = max(ab, bc, ac) 

println(df) 

=> LoadError: MethodError: нет соответствующего метода isless (:: DataArrays.DataArray {Int64,1}, {:: Массив Любой, 1})

не делая максимум либо df[:max] = max(ab, bc) или df[:max] = max(a, b, c) работает, как ожидалось.

Может кто-нибудь уточнить, что происходит? Спасибо!

ответ

3

Обратите внимание на типы возвращаемых:

julia> typeof(ab) 
DataArrays.DataArray{Int64,1} 

julia> typeof(bc) 
DataArrays.DataArray{Int64,1} 

julia> typeof(ac) 
DataArrays.DataArray{Int64,1} 

julia> typeof(max(ab, bc)) 
Array{Any,1} 

Это последнее является проблемой. Julia жалуется, что не может сравниться с DataArray{Int64,1} с номером Array{Any,1}. Это не происходит с оригинальными массивами Int, потому что они не имеют NA. Как отмечено в операциях DataFrames docs, NA, яды массивов.

Обратите внимание, что следующий код работает нормально, потому что он не имеет NA, поэтому типа возвращаемого max полностью определен:

df2 = DataFrame(A = a, B = b, C = c) 
df2[:max] = max(a, b, c) 
typeof(df2[:max]) ### DataArrays.DataArray{Int64,1} 

Ваш лучший вариант приписывать или очистить NA от вашего DataFrame перед вычислением максимумов , Простой способ очистки NA по строке

df3 = DataFrames.na_omit(df)[1] 
+0

Является ли 'na_omit()' документированным где угодно? Не мог этого увидеть ... – daycaster

+1

Насколько мне известно. 'na_omit' не экспортируется' DataFrames'. он все еще существует в v0.8.5, хотя это может измениться в будущем –

 Смежные вопросы

  • Нет связанных вопросов^_^