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

R中基于列值新增行:为仅存SMA类型的PPCODE补充LAR类型行

R语言dplyr实现PPCODE类型补全方案

实现思路

  1. 按PPCODE字段分组,筛选出存在SMA类型记录、但不存在LAR类型记录的分组
  2. 对符合条件的分组去重,每个PPCODE仅生成1条待补充的记录
  3. 修改待补充记录的指定字段:SHOPID设为NA、TYPE设为"LAR",其余字段保留原有取值
  4. 将生成的补充记录合并到原数据集末尾

完整实现代码

# 加载依赖库
library(dplyr)

# 加载示例数据集(可替换为你的真实数据集)
df <- structure(list(SHOPID = c("11T", "2T1", "33A", "14B", "29O"), 
                     PPCODE = c(4412, 3567, 4412, 3567, 5123), 
                     PRICE = c(1.45, 1.21, 1.45, 1.21, 1.01), 
                     TYPE = c("LAR", "SMA", "SMA", "SMA", "LAR")), 
                row.names = c(NA, -5L), 
                class = c("tbl_df", "tbl", "data.frame"))

# 生成需要补充的LAR类型记录
new_rows <- df %>%
  group_by(PPCODE) %>%
  # 筛选满足条件的PPCODE分组
  filter(any(TYPE == "SMA") & !any(TYPE == "LAR")) %>%
  # 同一个PPCODE去重,仅保留1条记录生成补全行
  distinct(PPCODE, PRICE, .keep_all = TRUE) %>%
  ungroup() %>%
  mutate(
    # 适配SHOPID的字符类型,避免类型报错
    SHOPID = NA_character_,
    TYPE = "LAR"
  )

# 合并补全行到原数据集,得到最终结果
result <- bind_rows(df, new_rows)

适配说明

  • 该方案为通用逻辑,可直接适配任意规模的数据集,所有符合条件的PPCODE都会自动生成补全行
  • 如果实际业务中同一个PPCODE对应的SMA记录存在PRICE取值不一致的情况,可调整去重逻辑,比如用summarise(PRICE = mean(PRICE))等方式统一PRICE取值即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 14:24:05