为了账号安全,请及时绑定邮箱和手机立即绑定

根据向量以特定顺序对数据帧行进行排序

根据向量以特定顺序对数据帧行进行排序

FFIVE 2019-10-25 13:11:33
是否有一种更简单的方法来确保数据框的行根据我在下面的简短示例中实现的“目标”矢量进行排序?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 FALSEtarget <- c("b", "c", "a", "d")这似乎有点“复杂”,无法完成工作:idx <- sapply(target, function(x) {    which(df$name == x)})df <- df[idx,]rownames(df) <- NULLdf #   name value# 1    b  TRUE# 2    c FALSE# 3    a  TRUE# 4    d FALSE
查看完整描述

3 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

尝试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以该顺序返回。


查看完整回答
反对 回复 2019-10-25
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

我更喜欢***_join 在dplyr需要匹配数据时使用。一种可能的尝试


left_join(data.frame(name=target),df,by="name")

请注意,***_joinrequire tbls或data.frame 的输入


查看完整回答
反对 回复 2019-10-25
  • 3 回答
  • 0 关注
  • 606 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信