¿Hay una manera más fácil de garantizar que las filas de un marco de datos se ordenen de acuerdo con un vector "objetivo" como el que implementé en el breve ejemplo a continuación?
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")
Esto de alguna manera parece ser demasiado "complicado" para hacer el trabajo:
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
b,c,a,d,b,c,a,d
. Lo intentématch
pero no funciona bien.match()
. Lo que viene a la mente esduplicated()
,unique()
o alguna otra rutina personalizada que "mantiene" los elementos deseados mientras desecha los demás. HTHdf <- data.frame(name=letters[c(1:4, 1:4)], value=c(rep(TRUE, 2), rep(FALSE, 2),rep(TRUE, 2), rep(FALSE, 2) )) target <- c("b", "c", "a", "d") df[order(unlist(sapply(df$name, function(x) which(target == x)))),]