R:如何基于列值合并未对齐的数据帧

时间:2011-12-09 01:17:56

标签: r

我有以下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中执行此操作的最简单方法是什么?

2 个答案:

答案 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)