我正在尝试学习 Julia 中根据另一列中的值更新一列中的 DataFrame 的最佳方法。我主要使用 R,我可以在其中编写:
library(data.table)
dt <- data.table(A = 1:5, B = 6:10)
# A B
# ----
# 1 6
# 2 7
# 3 8
# 4 9
# 5 10
dt[A < 3, B := B * 2]
# A B
# ----
# 1 12
# 2 14
# 3 8
# 4 9
# 5 10
...更新B
在哪里 A < 3
,而且也非常简洁。我发现的唯一 Julia 等效项是:
using DataFrames
df = DataFrame(A = 1:5, B = 6:10)
transform!(df, [:A, :B] => ByRow((a, b) -> a < 3 ? b * 2 : a))
这是唯一的方法吗?它是首选吗?有没有什么包可以让这个更简洁?
最佳答案
目前您可以执行以下操作:
@. df.B = ifelse(df.A < 3, 2*df.B, df.B)
或者这个
df.B = @. ifelse(df.A < 3, 2*df.B, df.B)
或者这个
dfv = view(df, df.A .< 3, :);
@. dfv.B = dfv.B * 2
第三种方法与 data.table 提供的方法类似,但您必须首先单独创建一个 View (data.table 在一个命令中完成的操作)。
第一种方法和第二种方法之间的区别在于 :B
列是就地更新还是替换。
关于dataframe - Julia DataFrame - 根据另一列中的值更新一列中的值的首选方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66586623/