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

时间:2014-08-21 17:56:50

标签: r dictionary replace dataframe lookup

我有两个数据帧,一个带有'编码'值和另一个充当字典:

> head( encoded_values )
value
1
2
1
3

> head( dict )
id    name
1     foo
2     bar
3     baz

我希望替换第一个数据框中的值,并使用'解码'查找第二个数据框的值。这应该是结果:

> head( encoded_values )
foo
bar
foo
baz

我发现了许多类似的帖子,但没有针对我的案例。也许这是一个非常常见的操作,但我对R来说很陌生,而且我已经尝试了迄今为止所有的许多可能性(其中没有一个可行)。

非常感谢。

2 个答案:

答案 0 :(得分:8)

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

dict[match(encoded_values$value, dict$id), 2, drop=F]

生成(我们需要drop=F以便返回data.frame而不是向量,因为我们只选择了一列):

    name
1    foo
2    bar
1.1  foo
3    baz

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

实际取代:

encoded_values$value <- with(dict, name[match(encoded_values$value, id)])

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

dict[encoded_values$value, 2, drop=F]

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

答案 1 :(得分:0)

以防万一,如果您的encoded_values多列的矩阵,您也可以尝试这样做,

words_mapped <- matrix(with(dict, name[match(encoded_values[ ,1:ncol(encoded_values)], id)]), nrow = nrow(encoded_values))

这也适用于问题中的单列向量。干杯!