Julia 有条件地添加列
我试图添加一个新列,其值以其他列为条件Julia 有条件地添加列,julia,Julia,我试图添加一个新列,其值以其他列为条件 using DataFrames, DataFramesMeta df = DataFrame(a = 1:10, b = StatsBase.sample([0, 1], 10, replace = true), c = StatsBase.sample([0, 1], 10, replace = true), d = StatsBase.sample([0
using DataFrames, DataFramesMeta
df = DataFrame(a = 1:10,
b = StatsBase.sample([0, 1], 10, replace = true),
c = StatsBase.sample([0, 1], 10, replace = true),
d = StatsBase.sample([0, 1], 10, replace = true))
@linq df |>
transform(e = ifelse.(:b == 1 || :c == 1 || :d == 1, 1, 0))
但这并不能正确评估:
a b c d e
1 1 0 1 1 0
2 2 1 0 1 0
3 3 0 0 0 0
4 4 1 1 0 0
5 5 1 0 0 0
6 6 0 1 0 0
7 7 0 0 0 0
8 8 1 0 1 0
9 9 1 0 1 0
10 10 0 1 1 0
哪里出了问题 以下是您如何做到这一点(我使用rand
from Base生成数据,因为在这种情况下就足够了):
问题是,您必须将转换
中的操作广播为:b==1
等。这些操作将始终为假
我还展示了在这种情况下,您可以使用Int
简单地将结果转换为整数,ifelse
非常有用,如果您需要一些常规值
实际上在这种情况下,可能是byrow代码>更简单:
@byrow! df begin
@newcol e::Vector{Int}
:e = :b == 1 || :c == 1 || :d == 1 ? 1 : 0
end
可能不是一个优雅但简单的解决方案:
df[df.a .< 5, :b] .= 2
df[df.a.<5,:b].=2
太棒了@拜罗!在这种情况下,这是一个相当优雅的解决方案。你应该成为每个Julia数据科学新手的必读读物。。。
df[df.a .< 5, :b] .= 2