有没有一种更简单的方法来确保数据帧的行根据“目标”向量进行排序,就像我在下面的简短示例中实现的那样?
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
Try 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
,并且都不包含重复值。
From ?match
:
match returns a vector of the positions of (first) matches of its first argument
in its second.
所以match
查找匹配的行号target
的元素,然后我们返回df
以该顺序。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)