使用另一个数据框中列的查找匹配值填充数据框col

时间:2013-11-30 16:38:14

标签: r syntax indexing lookup

我有一个索引拼图。这是玩具版。我有一个查找df,HasCats,有2个cols,Uid和Cats,它为每个Uid提供了该Uid的类别分组。我有另一个df,NeedsCats,根据Uid的值,需要在新列中添加此类别属性信息。 Uid将在NeedsCats中重复。

NeedsCats <- data.frame("Uid" = c("B", "D", "A", "C", "C"))
HasCats <- data.frame("Uid" = c("A", "B", "C", "D"), "Cat" = c("aa", "bb", "aa", "bb"))

我正在寻找正确的赋值语句,它将使用正确的值(HasCats中的查找值)填充NeedsCats $ Cats,其中包含NeedsCats中$ Uid的每个值,在本例中为c(“bb”,“bb” “,”aa“,”aa“,”aa“)。

NeedsCats很长,Uid值会重复,并且可以按任何顺序发生。

我无法通过正确利用R索引的矢量化方法来确定如何执行此操作。我想这可能很简单。有人可以帮忙吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

您可以尝试merge

merge(NeedsCats, HasCats)
#   Uid Cat
# 1   A  aa
# 2   B  bb
# 3   C  aa
# 4   C  aa
# 5   D  bb

# or to avoid re-ordering
merge(NeedsCats, HasCats, sort = FALSE)

# for some reason the 'no sorting please' in merge rarely works for more complex merging
# if order is important, and you don't want to re-order using `order` you may try:
library(plyr)
join(NeedsCats, HasCats)
# Joining by: Uid
#   Uid Cat
# 1   B  bb
# 2   D  bb
# 3   A  aa
# 4   C  aa
# 5   C  aa

答案 1 :(得分:0)

我刚刚搞砸了似乎有用的东西....我将HasCats中的Uids转换成行名,然后根据这些标签索引到HasCats,使用需要匹配的NeedsCats值,指定列数值上的查找值。

rownames(HasCats) <- HasCats$Uid
NeedsCats$Cat <- HasCats[NeedsCats$Uid, 2]

这实际上是一种合理的解决方法,还是有一些我错过的更明显的事情?

谢谢!