我有一个数据框:
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'之前),但之后我不在乎。
答案 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