我有两个数据帧,一个带有'编码'值和另一个充当字典:
> 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来说很陌生,而且我已经尝试了迄今为止所有的许多可能性(其中没有一个可行)。
非常感谢。
答案 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]
但这只能起作用,因为id
中dict
变量的特殊性质(从1开始,每个增加1)。
答案 1 :(得分:0)
以防万一,如果您的encoded_values
是多列的矩阵,您也可以尝试这样做,
words_mapped <- matrix(with(dict, name[match(encoded_values[ ,1:ncol(encoded_values)], id)]), nrow = nrow(encoded_values))
这也适用于问题中的单列向量。干杯!