是否有一種更簡單的方法來確保數(shù)據(jù)框的行根據(jù)我在下面的簡短示例中實現(xià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 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秒到達戰(zhàn)場
TA貢獻1828條經驗 獲得超6個贊
我更喜歡***_join 在dplyr需要匹配數(shù)據(jù)時使用。一種可能的嘗試
left_join(data.frame(name=target),df,by="name")
請注意,***_joinrequire tbls或data.frame 的輸入
- 3 回答
- 0 關注
- 688 瀏覽
添加回答
舉報
0/150
提交
取消