请求协助:基于Significance标识对log2FC列数值升序排名
为指定条件行的数值列升序分配排名
需求说明
需要为数据框中Significance列标记为Yes的行,根据log2FC列的数值升序分配排名,新增Rank列;Significance为No的行,Rank列留空。
初始数据
treatment=c(100,200,100,400) cotrol=c(100,100,400,100) log2FC=c(0,1,-2,2) Significance=c("No","Yes","Yes","Yes") data=data.frame(treatment,cotrol,log2FC,Significance)
初始数据表:
| treatment | cotrol | log2FC | Significance |
|---|---|---|---|
| 100 | 100 | 0 | No |
| 200 | 100 | 1 | Yes |
| 100 | 400 | -2 | Yes |
| 400 | 100 | 2 | Yes |
解决方案
方法1:基础R实现
# 初始化Rank列为NA(对应空值) data$Rank <- NA # 仅对Significance为Yes的行计算升序排名 data$Rank[data$Significance == "Yes"] <- rank(data$log2FC[data$Significance == "Yes"])
方法2:dplyr包实现(简洁直观)
library(dplyr) data <- data %>% mutate(Rank = case_when( # 对符合条件的行计算log2FC的升序排名 Significance == "Yes" ~ rank(log2FC), # 其余行设为NA TRUE ~ NA_real_ ))
最终结果
执行代码后的数据表与期望一致:
| treatment | cotrol | log2FC | Significance | Rank |
|---|---|---|---|---|
| 100 | 100 | 0 | No | |
| 200 | 100 | 1 | Yes | 2 |
| 100 | 400 | -2 | Yes | 1 |
| 400 | 100 | 2 | Yes | 3 |
内容的提问来源于stack exchange,提问作者Marlop
相关产品推荐
相关产品推荐

