如何用R中的表映射替换值

sam*_*pei 6 lookup dictionary replace r dataframe

我有两个数据帧,一个带有'encoded'值,另一个带有一个充当字典的数据帧:

> head( encoded_values )
value
1
2
1
3

> head( dict )
id    name
1     foo
2     bar
3     baz
Run Code Online (Sandbox Code Playgroud)

我想通过查找第二个数据帧将第一个数据帧中的值替换为"已解码"值.这应该是结果:

> head( encoded_values )
foo
bar
foo
baz
Run Code Online (Sandbox Code Playgroud)

我发现了许多类似的帖子,但没有针对我的情况.也许这是一个非常常见的操作,但我对R来说很新,并且因为我迄今为止尝试过的所有可能性而完全失败(其中没有一个可行).

非常感谢.

Bro*_*ieG 8

这是match(注意,快得多merge)为:

dict[match(encoded_values$value, dict$id), 2, drop=F]
Run Code Online (Sandbox Code Playgroud)

生产(我们需要drop=F这样一个data.frame返回,而不是因为我们只选择一列向量):

    name
1    foo
2    bar
1.1  foo
3    baz
Run Code Online (Sandbox Code Playgroud)

match在第二个参数中返回值的第一个参数中的值的位置.然后,您可以使用它来索引第二个参数.

实际替换:

encoded_values$value <- with(dict, name[match(encoded_values$value, id)])
Run Code Online (Sandbox Code Playgroud)

请注意,在这个简单的情况下,因为你的id与行号匹配dict,你也可以这样做:

dict[encoded_values$value, 2, drop=F]
Run Code Online (Sandbox Code Playgroud)

但这只能起作用,因为id变量的特殊性dict(从1开始,每个增加1).