我有一个索引拼图。这是玩具版。我有一个查找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索引的矢量化方法来确定如何执行此操作。我想这可能很简单。有人可以帮忙吗?
谢谢!
答案 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]
这实际上是一种合理的解决方法,还是有一些我错过的更明显的事情?
谢谢!