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

在R中如何将数据框(df)内的1替换为对应行的求和结果?

失败原因说明

你之前操作错误大概率是两个原因:

  1. 新增的sum列没有被排除在计算范围外,计算行和时会把新增的列也计入,导致行和计算错误
  2. 没有明确指定「仅将值为1的位置替换为对应行的行和」的逻辑,直接赋值会出现维度不匹配或全表覆盖的问题

实现方案

方法1:dplyr 实现(适合tidyverse用户)

# 加载依赖包
library(dplyr)

# 构造示例数据(你可以替换成自己的数据集)
my_df <- data.frame(
  Path_A = c(0,1,0,1),
  Path_B = c(1,1,0,1),
  Path_C = c(0,0,1,1),
  row.names = paste0("Gene_", 1:4)
)

# 核心处理逻辑
my_df_result <- my_df %>%
  # 先计算每行的通路总数,临时存储为row_sum
  mutate(row_sum = rowSums(across(everything()))) %>%
  # 遍历所有通路列,将1替换为对应行的row_sum,0保持不变
  mutate(across(-row_sum, ~ifelse(.x == 1, row_sum, .x))) %>%
  # 删除临时的row_sum列,保留原数据框的列结构
  select(-row_sum)

方法2:base R 实现(无需加载额外包)

# 构造示例数据(你可以替换成自己的数据集)
my_df <- data.frame(
  Path_A = c(0,1,0,1),
  Path_B = c(1,1,0,1),
  Path_C = c(0,0,1,1),
  row.names = paste0("Gene_", 1:4)
)

# 核心处理逻辑
row_sum <- rowSums(my_df)
my_df_result <- as.data.frame(lapply(my_df, function(col) {
  ifelse(col == 1, row_sum, col)
}))
# 保留原行名
rownames(my_df_result) <- rownames(my_df)

结果验证

输出my_df_result即可得到你需要的格式:

Path_A Path_B Path_C
Gene_1      0      1      0
Gene_2      2      2      0
Gene_3      0      0      1
Gene_4      3      3      3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:09:03