如何用dplyr按筛选查询向量顺序过滤dataframe并保留该顺序?
解决方案
filter() 函数本身只负责筛选符合条件的行,不会改变结果的排序——它会保留原数据集中的行顺序。要实现按查询向量的顺序展示结果,需要搭配 arrange() 一起使用,这里有两种简单的实现方式:
方法1:利用因子(factor)指定排序层级
把筛选用的向量设置为 name 列的因子层级,再按这个因子排序:
df <- tibble(name = letters, score = 1:26) df %>% filter(name %in% c("g","m","b")) %>% mutate(name = factor(name, levels = c("g","m","b"))) %>% arrange(name)
方法2:用 match() 直接映射排序位置
match() 会返回每个 name 在查询向量中的位置,按这个位置排序更简洁:
df %>% filter(name %in% c("g","m","b")) %>% arrange(match(name, c("g","m","b")))
两种方法都能得到你要的 g,m,b 顺序,第二种不需要修改列类型,用起来更直接。
内容的提问来源于stack exchange,提问作者David R
相关产品推荐
相关产品推荐

