小编典典

根据具有特定顺序的向量对数据框行进行排序

all

有没有一种更简单的方法来确保数据框的行按照我在下面的简短示例中实现的“目标”向量进行排序?

df <- data.frame(name = letters[1:4], value = c(rep(TRUE, 2), rep(FALSE, 2)))

df
#   name value
# 1    a  TRUE
# 2    b  TRUE
# 3    c FALSE
# 4    d FALSE

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

这似乎有点太“复杂”而无法完成工作:

idx <- sapply(target, function(x) {
    which(df$name == x)
})
df <- df[idx,]
rownames(df) <- NULL

df 
#   name value
# 1    b  TRUE
# 2    c FALSE
# 3    a  TRUE
# 4    d FALSE

阅读 69

收藏
2022-07-13

共1个答案

小编典典

尝试match

df <- data.frame(name=letters[1:4], value=c(rep(TRUE, 2), rep(FALSE, 2)))
target <- c("b", "c", "a", "d")
df[match(target, df$name),]

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

只要您target包含与 完全相同的元素df$name,并且不包含重复值,它就会起作用。

来自?match

match returns a vector of the positions of (first) matches of its first argument 
in its second.

因此match找到与target的元素匹配的行号,然后我们df按该顺序返回。

2022-07-13