在R中使用匹配,但保留后续实例

时间:2017-03-29 16:57:26

标签: r

我有一个数据框:

df <- data.frame(name = c('a', 'b', 'c', 'd', 'a', 'b', 'a'), value = c(rep(TRUE, 4), rep(FALSE, 3)))

和目标:

target <- c('b', 'a', 'd', 'c')

我知道如果我运行以下内容,

new_df <- df[match(target, df$name), ]

它将按目标的顺序返回df,但仅返回第一个实例。在示例数据中,我在df$name中有后续的'a'和'b'实例。我该如何保存?我不在乎它们发生在哪里,只关注它们的存在。任何名称的第一个实例应该是目标的顺序(所以'a'必须出现在'd'或'c'之前),但之后我不在乎。

1 个答案:

答案 0 :(得分:1)

这个怎么样?

df <- data.frame(name = c('a', 'b', 'c', 'd', 'a', 'b', 'a'), 
   value = c(rep(TRUE, 4), rep(FALSE, 3)))

target <- c('b', 'a', 'd', 'c')

> df[unlist(sapply(target, function(e) which(df$name == e))),]

结果:

  name value
2    b  TRUE
6    b FALSE
1    a  TRUE
5    a FALSE
7    a FALSE
4    d  TRUE
3    c  TRUE