R语言:如何用指定公式替换多列中的0值
解决方法
你的需求是替换B、C列中的0值为「对应列总和 × 该行PercentageInA值」,原代码的问题在于变量名拼写错误(PercentageInVictoria应为PercentageInA),且未正确匹配行维度的PercentageInA值计算。
正确代码
# 原始数据集 df <- data.frame(ID = c("01", "02", "03", "04"), B = c(0, 53, 100, 58), C = c(0, 0, 0, 14), PercentageInA = c(0.001, 0, 0.127, 0.005)) # 指定需要处理的列 col_need_to_calculate <- c("B", "C") # 执行替换操作 df_result <- df %>% mutate(across(all_of(col_need_to_calculate), ~ ifelse(. == 0, sum(.) * PercentageInA, .))) # 查看结果 df_result
结果验证
运行后得到的结果与预期完全一致:
- B列:第一行0替换为
sum(B)*0.001 = 211*0.001 = 0.211,其余非0值保留 - C列:第一行0替换为
sum(C)*0.001 =14*0.001=0.014,第二行0因PercentageInA=0仍为0,第三行0替换为14*0.127=1.778,第四行14保留
关键逻辑说明
all_of(col_need_to_calculate):确保向量形式的列名能被across正确识别sum(.):across中.代表当前处理的列,sum(.)计算该列的原始总和(包含0值)ifelse(. ==0, sum(.)*PercentageInA, .):逐值判断,0值按公式替换,非0值保持原样
内容的提问来源于stack exchange,提问作者AnnaHo
相关产品推荐
相关产品推荐

