R语言无需新增列即可按数值阈值过滤因子列对应DataFrame数据行
解决方案
以下两种方案均不需要新增中间列,可直接实现需求:
方法1:tidyverse(dplyr)方案
直接在分组后调用filter()对整组做条件判断即可:
library(dplyr) threshold <- 2.5 res_df <- df %>% group_by(cells) %>% filter(all(values >= threshold)) %>% ungroup()
说明:all(values >= threshold)会对每个cells分组内的所有数值做校验,只有该组全部数值都满足≥阈值的条件,才会保留该组的所有行。
方法2:base R 方案
无需加载第三方包,用ave()实现分组过滤:
threshold <- 2.5 res_df <- df[ave(df$values, df$cells, FUN = function(x) all(x >= threshold)) == 1, ]
说明:ave()会按cells分组对values应用校验函数,返回和原数据行数一致的逻辑向量,直接用作行索引即可完成过滤。
内容的提问来源于stack exchange,提问作者Ilhan
相关产品推荐
相关产品推荐

