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

R语言按条件批量填充多列:为关联记录补充有效邮箱

用tidyverse实现分组批量填充有效邮箱列

示例输入数据

先构造符合需求的示例数据集:

library(tidyverse)

df <- tibble(
  id2 = c(1,1,1,2,2,3),
  email = c("a@test.com", "-", "b@test.com", "c@test.com", "-", "-"),
  isValidEmail = c(1,0,1,1,0,0)
)

实现代码

分两步完成批量填充:

# 第一步:提取每组有效邮箱并转为宽格式
valid_emails_wide <- df %>%
  # 筛选出有效邮箱记录
  filter(isValidEmail == 1) %>%
  # 按id2分组
  group_by(id2) %>%
  # 为每个有效邮箱生成带序号的列名
  mutate(email_num = str_c("validEmail", row_number())) %>%
  # 转宽格式,每个id2对应一行,包含所有有效邮箱列
  pivot_wider(
    id_cols = id2,
    names_from = email_num,
    values_from = email
  )

# 第二步:左连接回原数据集,完成全量填充
result <- df %>%
  left_join(valid_emails_wide, by = "id2")

代码说明

  1. 提取转宽:先过滤出isValidEmail=1的记录,按id2分组后给每个有效邮箱生成带序号的列名(如validEmail1、validEmail2),再转成宽格式——每个id2对应一行,包含该组所有有效邮箱的列。
  2. 连接填充:把宽格式的有效邮箱表和原表按id2左连接,无论原记录的邮箱是否有效,都会带上对应id2组的全部有效邮箱列;若某组无有效邮箱,对应列自动填充NA。

大规模数据适配

这套逻辑采用tidyverse中效率较高的核心函数(filter、group_by、pivot_wider),可适配大规模数据集的处理需求;若不同id2组的有效邮箱数量差异大,pivot_wider会自动为邮箱数量少的组补NA,保证结果一致性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 05:19:57