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

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


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


FFIVE
浏览 616回答 3
3回答

婷婷同学_

尝试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),]&nbsp; name value2&nbsp; &nbsp; b&nbsp; TRUE3&nbsp; &nbsp; c FALSE1&nbsp; &nbsp; a&nbsp; TRUE4&nbsp; &nbsp; d FALSE只要您target包含与完全相同的元素df$name并且都不包含重复值,它将起作用。来自?match:match returns a vector of the positions of (first) matches of its first argument&nbsp;in its second.因此,match找到与target元素匹配的行号,然后我们df以该顺序返回。

30秒到达战场

我更喜欢***_join 在dplyr需要匹配数据时使用。一种可能的尝试left_join(data.frame(name=target),df,by="name")请注意,***_joinrequire tbls或data.frame 的输入
打开App,查看更多内容
随时随地看视频慕课网APP