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

如何无硬编码实现:邻列NA截断列求和及列间除法?

解决方案:基于相邻列NA截断求和并计算列间比值

核心思路

针对含DATE列的数据表,先分离数值列,再根据下一列第一个NA的位置确定当前列的截断求和范围(最后一列则依据自身第一个NA位置),完成求和后计算列间比值,全程无需硬编码列名或数量。

代码实现(R语言)

library(dplyr)
library(tibble)

# 1. 构造示例数据(替换为你的实际数据表即可)
df <- tibble(
  DATE = c("07/01/2022", "08/01/2022", "09/01/2022"),
  `1` = c(2, 1, 3),
  `2` = c(12, 1, NA),
  `3` = c(12, NA, NA)
)

# 2. 分离DATE列与数值列
num_cols <- df %>% select(-DATE)

# 3. 定义函数:计算单列的截断行索引
get_cutoff_row <- function(col_idx, df_num) {
  if (col_idx < ncol(df_num)) {
    # 非最后一列:取下一列第一个NA的位置减1,无NA则取全部行
    next_col_first_na <- which(is.na(df_num[[col_idx + 1]]))[1]
    cutoff <- ifelse(is.na(next_col_first_na), nrow(df_num), next_col_first_na - 1)
  } else {
    # 最后一列:取自身第一个NA的位置减1,无NA则取全部行
    curr_col_first_na <- which(is.na(df_num[[col_idx]]))[1]
    cutoff <- ifelse(is.na(curr_col_first_na), nrow(df_num), curr_col_first_na - 1)
  }
  max(cutoff, 1) # 确保至少取第一行
}

# 4. 生成每列的截断行索引
cutoff_rows <- sapply(1:ncol(num_cols), get_cutoff_row, df_num = num_cols)

# 5. 执行截断求和
total_vals <- mapply(function(col, cutoff) sum(col[1:cutoff], na.rm = TRUE), num_cols, cutoff_rows)
total_df <- tibble(category = "TOTAL", !!!set_names(total_vals, names(num_cols)))

# 6. 计算列间比值(后一列 ÷ 前一列)
ratio_vals <- total_vals[-1] / total_vals[-length(total_vals)]
ratio_df <- tibble(category = "RATIO", !!!set_names(ratio_vals, paste0(names(num_cols)[-1], "/", names(num_cols)[-length(num_cols)])))

# 7. 合并最终结果
final_result <- bind_rows(total_df, ratio_df)

# 查看结果
print(total_df)
print(final_result)

结果说明

  • 运行代码后,total_df会输出你需要的截断求和结果:
    # A tibble: 1 × 4
      category   `1`   `2`   `3`
      <chr>    <dbl> <dbl> <dbl>
    1 TOTAL        3    12    12
    
  • final_result会同时包含求和结果与列间比值:
    # A tibble: 2 × 4
      category   `1`   `2`   `3`
      <chr>    <dbl> <dbl> <dbl>
    1 TOTAL        3    12    12
    2 RATIO       NA     4     1
    

为什么adorn_table没成功?

janitor::adorn_totals()是对整列进行求和/汇总,无法根据相邻列的NA位置动态截断求和范围,因此需要自定义逻辑实现需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 15:27:41