我有以下R程序,其中 df.1和df.2具有不同的行数,而ItemIndex在每个数据框中都是唯一的:
df.1 = data.frame(ItemName = ItemNameVector, ItemIndex = ItemIndexVector)
df.1.len = length(df$ItemName)
df.2 = data.frame(ItemIndex = ItemIndexVector2)
ret = vector(length = df.1.ret)
for( i in 1:df.1.len ) {
index = df.1[i, "ItemIndex"]
ret[i] = df.2[df.1$ItemIndex == index, "ItemName"]
}
换句话说,我想找到所有df.1 ItemName值,其中df.1 ItemIndex匹配df.2 ItemIndex。 ItemIndex值是唯一的,但在df.1和df.2中它们不相同。
我认为merge()有一些东西,但我无法根据每个字段的值使其适用于选择性案例。
在R中执行此操作的最简单方法是什么?
答案 0 :(得分:2)
这是未经测试的,因为您的示例不可重现,但我认为您可能正在寻找match
(具有讽刺意味的是):
ret <- df.2$ItemName[match(df.1$ItemIndex, df.2$ItemIndex)]
请注意,match
会返回第一个匹配的位置,因此这是使用您对ItemIndex唯一性的假设。
答案 1 :(得分:1)
这是你的问题的答案(你的代码从df.2而不是df.1返回数据)。
subset(df.1, ItemIndex %in% df.2$ItemIndex, select=ItemName)