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

如何在R中按ID补全DataFrame至指定X_F范围(保留指定值)

解决方案

完整代码实现

library(tidyverse)

# 构造原始数据框
DF11 <- data.frame(
  ID = c("A", "A", "A", "B", "B", "B", "B", "B"),
  X_F = c(5, 7, 9, 6, 7, 8, 9, 10),
  X_A = c(7, 8, 9, 3, 6, 7, 9, 10)
)

# 生成目标数据框
DF112 <- DF11 %>%
  group_by(ID) %>%
  # 计算组内X_F的极值,拼接需要保留的X_F序列集合
  mutate(
    min_XF = min(X_F),
    max_XF = max(X_F),
    target_XF = list(c(seq(0, min_XF), X_F, seq(max_XF, max_XF + 3)))
  ) %>%
  # 展开序列并去重
  unnest(target_XF) %>%
  select(ID, target_XF) %>%
  distinct() %>%
  # 关联原数据匹配X_A值,无匹配则填充NA
  left_join(DF11, by = c("ID", "target_XF" = "X_F")) %>%
  # 调整列名并排序
  rename(X_F = target_XF) %>%
  arrange(ID, X_F) %>%
  ungroup()

print(DF112)

代码逻辑说明

  1. 分组计算极值:按ID分组后,计算每组X_F的最小值和最大值,确定需要补全的范围边界。
  2. 拼接目标序列:将三个需要保留的部分拼接成列表:
    • 从0到组内X_F最小值的整数序列
    • 原数据中已有的X_F值
    • 从组内X_F最大值到最大值+3的整数序列
  3. 去重与关联:展开列表并去重(避免原X_F值和补全序列重复),再通过左连接匹配原数据中的X_A值,无匹配项自动填充NA。
  4. 格式调整:重命名列并按ID和X_F排序,得到目标结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 01:55:18