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

R代码优化:无需新建数据框与左连接实现新增统计列

无需新建数据框与左连接的简洁R实现方案

问题描述

现有一段可运行的R代码,逻辑如下:

  1. 按column_a分组,生成total_sub_rows列(统计每组内column_b等于'specific'的行数)
  2. 过滤column_b为'specific'的数据,按column_a分组统计column_c的不同值数量得到sub_rows列
  3. 通过左连接将sub_rows合并回原数据框

希望找到更简洁的实现方式,避免新建数据框与左连接操作。

原代码:

# calculate initial column
data <- data %>% 
  group_by(column_a) %>% 
  mutate("total_sub_rows" = sum(column_b == 'specific')) %>% 
  ungroup()

# is there a way to get below into above code?
new_column <- data %>% 
  filter(column_b == 'specific') %>% 
  group_by(column_a) %>% 
  summarise(sub_rows = n_distinct(column_c)) %>% 
  ungroup()

data <- data %>% 
  left_join(new_column)

简洁实现方案

可以在同一分组操作中完成两个列的计算,无需额外的数据框和连接步骤。利用n_distinct()结合条件判断,直接在mutate里生成sub_rows:

data <- data %>%
  group_by(column_a) %>%
  mutate(
    total_sub_rows = sum(column_b == 'specific'),
    sub_rows = n_distinct(ifelse(column_b == 'specific', column_c, NA), na.rm = TRUE)
  ) %>%
  ungroup()

代码解释

  • total_sub_rows:和原逻辑一致,分组内统计column_b == 'specific'的行数总和
  • sub_rows:通过ifelse仅保留column_b == 'specific'对应的column_c值,其余替换为NA,再用n_distinct(..., na.rm = TRUE)统计分组内非NA的唯一值数量,等价于原代码过滤后统计唯一值的逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 22:45:01