如何在保留顺序和重复的同时使用向量作为匹配特定列的键来检索df的行?

时间:2018-01-24 00:05:40

标签: r

通常情况下我会用

来做这件事
df2 <- subset(df1, df$ID %in% vector)

但这并不能保留重复数据;或

df2 <- df[vector,]

但这并不是将矢量与df$column仅与行匹配

以下是data.frame

示例
  ID      Fruit     Color
1  2      Apple     Amber
2  5    Bannana      Blue
3  7     Cherry      Cyan
4  9       Date Dandelion
5 14 Elderberry     Earth
6 15        Fig   Fuchsia
7 21      Grape     Green

这是一个样本载体

vector <- c(5,5,5,7,2,14,14,14)

这是我想要的输出

  ID      Fruit Color
1  5    Bannana  Blue
2  5    Bannana  Blue
3  5    Bannana  Blue
4  7     Cherry  Cyan
5  2      Apple Amber
6 14 Elderberry Earth
7 14 Elderberry Earth
8 14 Elderberry Earth

2 个答案:

答案 0 :(得分:6)

尝试匹配ID

df[match(vector, df$ID), ]

答案 1 :(得分:2)

将矢量放在数据框中并进行合并:

df2 = data.frame(ID = vector)
df2 = merge(df2, df, by = "ID", sort = FALSE)

输出:

> df2
  ID      Fruit Color
1  5    Bannana  Blue
2  5    Bannana  Blue
3  5    Bannana  Blue
4  7     Cherry  Cyan
5  2      Apple Amber
6 14 Elderberry Earth
7 14 Elderberry Earth
8 14 Elderberry Earth

如果您正在使用dplyr,那么left_join似乎也可以正常工作,但保持排序顺序似乎没有记录,所以我不确定它是否可以依赖100%:

df3 = data.frame(ID = vector) %>%
    left_join(df, by = "ID")