是否有一种更简单的方法来确保数据框的行根据我在下面的简短示例中实现的“目标”矢量进行排序?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以该顺序返回。
30秒到达战场
TA贡献1828条经验 获得超6个赞
我更喜欢***_join 在dplyr需要匹配数据时使用。一种可能的尝试
left_join(data.frame(name=target),df,by="name")
请注意,***_joinrequire tbls或data.frame 的输入
- 3 回答
- 0 关注
- 657 浏览
添加回答
举报
0/150
提交
取消