You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中基于现有病毒检测列生成阳性病毒组合新列?

解决方案:在R中生成阳性病毒组合列

以下提供两种实用方法,帮你快速生成按字母排序的阳性病毒组合列:

方法一:使用tidyverse(dplyr)

适合习惯dplyr语法的用户,通过rowwise()实现逐行处理:

library(dplyr)

# 替换为你的实际病毒列名,比如FLUA、FLUB、RSV等
virus_cols <- c("FLUA", "FLUB", "RSV", "ADENO", "PIV1", "PIV2", "PIV3", "HRV", "HMPV", "OC43")

df1 <- df %>%
  rowwise() %>%
  mutate(
    virus_combinations = {
      # 筛选当前行值为1的病毒列名
      positive_viruses <- virus_cols[c_across(all_of(virus_cols)) == 1]
      # 按字母排序后用逗号连接
      paste(sort(positive_viruses), collapse = ", ")
    }
  ) %>%
  ungroup()

关键说明:

  • rowwise():让mutate对每行单独计算,而非整列批量处理
  • c_across(all_of(virus_cols)):精准选中指定的病毒列,获取当前行的所有检测值
  • 先筛选阳性病毒名,再排序后拼接,确保结果严格按字母顺序排列

方法二:使用基础R(apply函数)

无需加载额外包,适合轻量需求:

# 同样替换为你的病毒列名
virus_cols <- c("FLUA", "FLUB", "RSV", "ADENO", "PIV1", "PIV2", "PIV3", "HRV", "HMPV", "OC43")

# 逐行处理病毒列,生成组合字符串
df$virus_combinations <- apply(df[virus_cols], 1, function(row_data) {
  positive_viruses <- names(row_data)[row_data == 1]
  paste(sort(positive_viruses), collapse = ", ")
})

原代码问题解析:

你之前的代码错误在于:mutate默认按列操作,无法直接用names[value == 1]获取当前行的阳性列名。必须通过逐行处理(rowwise或apply)才能针对每行筛选对应的阳性病毒名称。

内容的提问来源于stack exchange,提问作者jcijac89

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 07:45:07