如何用R语言为数据表生成符合规则的identifiedID列?
生成identifiedID列的R语言实现
需求说明
我们需要为包含rs10330、rs18976、rs7498三列的数据表新增identifiedID列,规则如下:
- 统计每行中满足以下条件的列数:
rs10330取值为AG或GGrs18976取值为GT或TTrs7498取值为AT或TT
- 根据统计结果赋值:0列满足则
identifiedID=0,1列满足则=1,2列满足则=2,3列满足则=3
示例数据
datmp <- data.frame(rs10330=c('AA','AG','GG','AG','AA'), rs18976=c('GG','GT','GT','GG','GG'), rs7498=c( 'AA','AT','TT','AT','TT')) identifiedID <- c(0,3,3,2,1) datmp2 <- data.frame(datmp, identifiedID)
实现代码
基础R原生实现
直接通过逻辑判断生成布尔向量,再按行求和得到目标列:
# 生成各列的条件判断向量(TRUE代表满足条件,对应数值1;FALSE对应0) cond_rs10330 <- datmp$rs10330 %in% c("AG", "GG") cond_rs18976 <- datmp$rs18976 %in% c("GT", "TT") cond_rs7498 <- datmp$rs7498 %in% c("AT", "TT") # 按行求和,直接得到满足条件的列数,即identifiedID的值 datmp$identifiedID <- cond_rs10330 + cond_rs18976 + cond_rs7498 # 查看结果 print(datmp)
dplyr管道式实现(适合tidyverse工作流)
如果习惯使用tidyverse系列工具,可通过dplyr的管道语法完成:
library(dplyr) datmp <- datmp %>% mutate( # 生成临时条件列 cond1 = rs10330 %in% c("AG", "GG"), cond2 = rs18976 %in% c("GT", "TT"), cond3 = rs7498 %in% c("AT", "TT"), # 对临时条件列按行求和得到目标列 identifiedID = rowSums(select(., cond1, cond2, cond3)) ) %>% select(-cond1, -cond2, -cond3) # 可选:删除临时条件列 # 查看结果 print(datmp)
两种方法均能生成与示例完全一致的identifiedID列,核心逻辑是将每个条件转化为布尔值后求和,直接对应需求中的计数规则。
内容的提问来源于stack exchange,提问作者pengxianglan
相关产品推荐
相关产品推荐

