如何用R语言管道函数实现行与行的除法运算
解决方案:用管道操作新增'DB Q'行(BH Q/SI)
核心逻辑
rowwise()是单行独立处理,没法跨行调用BH Q和SI两行的数据做除法,所以换用dplyr的summarize()+across()组合,配合管道完成跨行计算,最后绑定新行,完美适配后续新增更多行的需求。
示例代码
先模拟符合你需求的数据结构(如果你的数据列名/结构不同,只需调整对应参数):
library(tidyverse) # 模拟原始数据框:category是行标识,后续列是月份数值 df <- tibble( category = c("BH Q", "SI"), Jan = c(10, 2), Feb = c(20, 4), Mar = c(30, 6) )
执行管道操作新增目标行:
df_new <- df %>% # 计算每个数值列的BH Q/SI比值,生成新行 summarize( category = "DB Q", across(where(is.numeric), ~ .[category == "BH Q"] / .[category == "SI"]) ) %>% # 将新行绑定到原始数据框(如果要把新行放前面,调换bind_rows的参数顺序即可) bind_rows(df, .) # 查看结果 print(df_new)
代码说明
across(where(is.numeric), ~ .[category == "BH Q"] / .[category == "SI"]):遍历所有数值列(月份列),对每个列提取BH Q行的值除以SI行的值summarize()生成包含'DB Q'标识和计算结果的单行数据框bind_rows()把新行合并到原数据,全程用管道衔接,后续新增其他行只需在管道后继续追加类似逻辑即可
执行结果
# A tibble: 3 × 4 category Jan Feb Mar <chr> <dbl> <dbl> <dbl> 1 BH Q 10 20 30 2 SI 2 4 6 3 DB Q 5 5 5
内容的提问来源于stack exchange,提问作者user20203146
相关产品推荐
相关产品推荐

