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

满足双条件时将列名拼接至新列的R语言实现问题

解决方法

你的代码报错核心问题是没有逐行处理数据:rowSums和paste(..., collapse=",")都是对整个列操作,无法匹配每行的判断逻辑。以下是两种可行的修正方案:

方案一:用dplyr逐行处理(推荐)

# 假设cols是指定病毒列的名称向量,column_indices是对应的列索引
df <- df %>%
  rowwise() %>%
  mutate(
    # 提取当前行中阳性的病毒列名
    pos_viruses = list(cols[c_across(all_of(column_indices)) == 1]),
    CoinfectionSpecified = ifelse(
      Influenza == 1 & length(pos_viruses) > 0,
      paste(pos_viruses, collapse = ","),
      NA_character_
    )
  ) %>%
  ungroup() %>%
  select(-pos_viruses) # 删除临时中间列
  • rowwise()强制dplyr逐行执行后续操作
  • c_across(all_of(column_indices))获取当前行指定列的所有值
  • 用list()保存每行的阳性病毒名,避免被自动压缩成向量

方案二:用apply逐行遍历

df$CoinfectionSpecified <- apply(df, 1, function(row) {
  # 先判断流感是否阳性
  if (row["Influenza"] != 1) {
    return(NA_character_)
  }
  # 提取当前行指定列中阳性的病毒名
  pos_viruses <- cols[row[column_indices] == 1]
  # 有阳性病毒则拼接,否则返回NA
  if (length(pos_viruses) > 0) {
    paste(pos_viruses, collapse = ",")
  } else {
    NA_character_
  }
})
  • apply(df, 1, ...)遍历每一行,对每行单独处理
  • 逻辑分层更清晰,适合不习惯dplyr语法的场景

注意事项

  • 确保cols向量的顺序和column_indices完全对应,避免列名匹配错误
  • 如果数据中有NA值,需要在判断时加入!is.na()(比如row[column_indices] == 1 & !is.na(row[column_indices]))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 16:15:18