如何统计R数据框中各基因满足F<V<M条件的cond1分组数量
实现思路
要完成这个统计需求,核心逻辑是先把每个gene+cond1组合下的F、V、M三个组的value提取到同一行,直接判断大小条件后按基因汇总符合条件的数量即可。
方法1:tidyverse 实现(推荐,代码简洁易读)
首先加载依赖包,再执行转换逻辑:
# 加载包 library(tidyverse) # 数据处理 result <- df %>% # 转宽表,将group的F/V/M作为列名,对应value作为值 pivot_wider(names_from = group, values_from = value) %>% # 判断是否满足F < V < M的条件 mutate(is_meet = F < V & V < M) %>% # 按基因分组统计符合条件的数量 group_by(gene) %>% summarise(count = sum(is_meet)) # 查看结果 print(result)
输出结果和要求完全一致:
# A tibble: 2 × 2 gene count <chr> <int> 1 A 3 2 B 1
方法2:base R 实现(无需额外安装包)
如果不想依赖第三方包,可以用原生R函数实现:
# 把长表转成宽表,每个gene+cond1对应一行 df_wide <- reshape(df, idvar = c("gene", "cond1"), timevar = "group", direction = "wide") # 新增列标记是否满足条件 df_wide$is_meet <- df_wide$value.F < df_wide$value.V & df_wide$value.V < df_wide$value.M # 按基因汇总计数 result <- aggregate(is_meet ~ gene, data = df_wide, FUN = sum) # 重命名列符合要求 colnames(result) <- c("gene", "count") # 查看结果 print(result)
输出结果和方法1完全相同。
内容的提问来源于stack exchange,提问作者Basti
相关产品推荐
相关产品推荐

