在R中如何将数据框(df)内的1替换为对应行的求和结果?
失败原因说明
你之前操作错误大概率是两个原因:
- 新增的
sum列没有被排除在计算范围外,计算行和时会把新增的列也计入,导致行和计算错误 - 没有明确指定「仅将值为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
相关产品推荐
相关产品推荐

