如何使用mutate匹配条件时粘贴列名?(患者风险因素统计场景)
解决方案
提取每行对应的风险项列名
在现有代码基础上,用pmap_chr遍历每行数据,筛选出值为"risk"的列名并拼接成字符串,同时排除patient列避免干扰:
library(tidyverse) df = data.frame( patient = seq(1:60), cancer = c("risk","ok"), blood_pres = c("risk", "ok"), low_education = c("risk","ok") ) df = df %>% mutate( how_many_risks = rowSums(select(., -patient) == "risk"), risk_items = pmap_chr(select(., -patient), ~{ current_row <- c(...) names(current_row)[current_row == "risk"] %>% str_c(collapse = ", ") }) )
找出最普遍的风险项(众数)
将数据转为长格式,统计各风险项的出现次数,排序后取次数最多的项:
# 统计各风险项出现频率 risk_frequency = df %>% pivot_longer(cols = -patient, names_to = "risk_factor", values_to = "status") %>% filter(status == "risk") %>% count(risk_factor, sort = TRUE) # 获取最普遍的风险项 most_common_risk = risk_frequency$risk_factor[1]
补充说明
select(., -patient)确保只处理风险相关列,避免patient列干扰计算逻辑。pmap_chr逐行处理传入的列值,筛选出标记为"risk"的列名并拼接,适合生成每行的风险项清单。- 转长格式后统计频率的方式,能清晰呈现所有风险项的分布,排序后的第一项即为众数风险项。
内容的提问来源于stack exchange,提问作者Luis
相关产品推荐
相关产品推荐

