#dataframe #julia
Вопрос:
Я хочу создать новую переменную (nota), используя функцию if-else с transform!
функцией из DataFrames
пакета.
Вот мой код:
using DataFrames datos = DataFrame(nombre =["ANGELICA","BRENDA","LILIANA","MARCO","FABIAN","MAURICIO"], grupo = ["A","A","B","B","C","C"], puntaje = [10,9,8,8,9,7]); transform!(datos, :puntaje =gt; ifelse(datos[datos.puntaje .lt; 9,:],"Suficiente","Excelente") =gt; :nota)
но эта ошибка отображается:
ERROR: TypeError: non-boolean (BitVector) used in boolean context Stacktrace: [1] top-level scope @ REPL[23]:1
Как я могу это решить?
Ответ №1:
Две проблемы:
- Вы смешиваетесь
ByRow
с обычным преобразованием, которое выполняется по столбцам - Вы не можете изменить тип
puntaje
столбца
Вы, наверное, хотите это сделать:
juliagt; datos.puntaje = ifelse.(datos.puntaje .lt; 9, "Suficiente", "Excelente") 6-element Vector{String}: "Excelente" "Excelente" "Suficiente" "Suficiente" "Excelente" "Suficiente" juliagt; datos 6×3 DataFrame Row │ nombre grupo puntaje │ String String String ─────┼────────────────────────────── 1 │ ANGELICA A Excelente 2 │ BRENDA A Excelente 3 │ LILIANA B Suficiente 4 │ MARCO B Suficiente 5 │ FABIAN C Excelente 6 │ MAURICIO C Suficiente
Комментарии:
1. Спасибо за вашу помощь. На самом деле, я хочу создать новую переменную
datos.nota = ifelse.(datos.puntaje .lt; 9, "Suficiente", "Excelente")
Ответ №2:
Если вы предпочитаете использовать transform!
два синтаксиса , которые работают:
juliagt; datos = DataFrame(nombre =["ANGELICA","BRENDA","LILIANA","MARCO","FABIAN","MAURICIO"], grupo = ["A","A","B","B","C","C"], puntaje = [10,9,8,8,9,7]); juliagt; transform!(datos, :puntaje =gt; (p -gt; ifelse.(p .lt; 9, "Suficiente", "Excelente")) =gt; :nota) 6×4 DataFrame Row │ nombre grupo puntaje nota │ String String Int64 String ─────┼─────────────────────────────────────── 1 │ ANGELICA A 10 Excelente 2 │ BRENDA A 9 Excelente 3 │ LILIANA B 8 Suficiente 4 │ MARCO B 8 Suficiente 5 │ FABIAN C 9 Excelente 6 │ MAURICIO C 7 Suficiente juliagt; transform!(datos, :puntaje =gt; ByRow(p -gt; ifelse(p lt; 9, "Suficiente", "Excelente")) =gt; :nota) 6×4 DataFrame Row │ nombre grupo puntaje nota │ String String Int64 String ─────┼─────────────────────────────────────── 1 │ ANGELICA A 10 Excelente 2 │ BRENDA A 9 Excelente 3 │ LILIANA B 8 Suficiente 4 │ MARCO B 8 Suficiente 5 │ FABIAN C 9 Excelente 6 │ MAURICIO C 7 Suficiente