在朱莉娅中使用人行横道翻译数据框

translate Dataframe using crosswalk in julia

我有一个非常大的数据框 (original_df),其中包含代码列

14 15
21 22
18 16

和第二个数据框(人行横道),将 'old_codes' 映射到 'new_codes'

14 104
15 105
16 106
18 108
21 201
22 202

当然,我想要的结果 df (resultant_df) 的值是:

104 105
201 202
108 106

我知道有两种方法可以做到这一点。首先,我可以遍历 original_df 中的每个代码,找到 crosswalk 中的代码,然后用来自 crosswalk 的翻译代码重写 original_df 中的相应单元格。更快更自然的选择是在 'old_codes' 上对 original_df 的每一列进行 leftjoin()。不幸的是,我似乎必须为每一列单独执行此操作,然后在创建转换列后删除每一列——这感觉不必要地复杂。有没有更简单的方法可以使用人行横道一次转换所有 original_df?

您可以执行以下操作(我使用列号,因为您没有提供列名):

d = Dict(crosswalk[!, 1] .=> crosswalk[!, 2])
resultant_df = select(original_df, [i => ByRow(x -> d[x]) for i in 1:ncol(original_df)], renamecols=false)