Dataframe 在julia中使用crosswalk转换数据帧

Dataframe 在julia中使用crosswalk转换数据帧,dataframe,join,julia,translate,crosswalk,Dataframe,Join,Julia,Translate,Crosswalk,我有一个非常大的数据帧(原始的_-df)和代码列 14 15 21 22 18 16 第二个数据帧(人行横道),将“旧代码”映射到“新代码” 14 104 15 105 16 106 18 108 21 201 22 202 当然,我想要的结果df(resultant_df)有以下值: 104 105 201 202 108 106 我知道有两种方法可以做到这一点。首先,我可以迭代原始_-df中的每个代码,在crosswalk中找到代码,然后用crosswalk中的翻译代码重写原始_-df

我有一个非常大的数据帧(原始的_-df)和代码列

14 15
21 22
18 16
第二个数据帧(人行横道),将“旧代码”映射到“新代码”

14 104
15 105
16 106
18 108
21 201
22 202
当然,我想要的结果df(resultant_df)有以下值:

104 105
201 202
108 106
我知道有两种方法可以做到这一点。首先,我可以迭代原始_-df中的每个代码,在crosswalk中找到代码,然后用crosswalk中的翻译代码重写原始_-df中相应的单元。更快、更自然的选择是在“旧_代码”上左连接()原始_df的每一列。不幸的是,我似乎必须对每一列单独执行此操作,然后在创建转换列后删除每一列--这感觉不必要地复杂。是否有一种更简单的方法可以使用人行横道一次性转换所有原始数据?

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


精彩的!有没有办法在ByRow()上添加条件句?我尝试了
ByRow(x->d[x]如果键(d)中有x)
,但似乎不起作用。更一般地说,一种了解拜罗的方法?如果你愿意的话,我很乐意把这篇文章作为自己的文章。我要求ByRow现在处理一个包含条件的函数。不确定这对速度有何影响,但它是有效的。
ByRow(fun)
只是
x->fun.(x)
。你是说过滤掉一些行的条件?。然后最好在执行选择之前执行此操作,例如通过索引或使用
过滤器
。是的,请提出一个单独的问题,就一些不清楚的问题展开讨论,我会回答。在
ByRow
中使用条件不是问题。如果要过滤掉一些行,那么很难做到。
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)