Вот как вы можете это сделать (я использую rand
из базы для генерации данных, как этого достаточно в этом случае):
using DataFrames, DataFramesMeta
df = DataFrame(a = 1:10, b = rand([0, 1], 10),
c = rand([0, 1], 10), d = rand([0, 1], 10))
@linq df |>
transform(e = Int.((:b .== 1) .| (:c .== 1) .| (:d .== 1)))
@linq df |>
transform(e = ifelse.((:b .== 1) .| (:c .== 1) .| (:d .== 1), "yes", "no"))
Проблема в том, что вы должны транслировать операции внутри transform
, так как :b == 1
и т. Д. Всегда будут false
.
Я также показываю, что в этом случае вы можете просто преобразовать результат в целое число, используя Int
, а ifelse
полезно, если вам нужны некоторые общие значения.
На самом деле в этом случае, вероятно, @byrow!
проще:
@byrow! df begin
@newcol e::Vector{Int}
:e = :b == 1 || :c == 1 || :d == 1 ? 1 : 0
end