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

R dataframe匹配值新增行并保留原值为NA的oth行(dplyr方案优先)

R dplyr 实现指定规则的DataFrame行拆分与字段修改

实现代码

library(dplyr)

# 原始数据
df <- data.frame(ID = c("1", "1", "1", "2", "2", "3"), 
                 type = c("oth", "oth", "oth", "oth", "oth", "oth"), 
                 value = c("A", "B", "B", "C", "D", "D"))

# 定义value到新type的映射规则,后续调整规则仅需修改此处
value_map <- c("A" = "1", "B" = "2", "C" = "3")

# 数据处理
df_processed <- df %>%
  rowwise() %>%
  reframe(
    ID = ID,
    type = ifelse(value %in% names(value_map), 
                  list(c(value_map[value], "oth")), 
                  list("oth"))[[1]],
    value = ifelse(value %in% names(value_map), 
                   list(c(value, NA_character_)), 
                   list(value))[[1]]
  ) %>%
  ungroup()

# 验证结果和预期是否一致
df2 <- data.frame(ID = c("1", "1", "1", "1", "1", "1", "2", "2", "2", "3"), 
                  type = c("1", "oth", "2", "oth", "2", "oth", "3", "oth", "oth", "oth"), 
                  value = c("A", NA, "B", NA, "B", NA, "C", NA, "D", "D"))
identical(df_processed, df2) # 返回 TRUE

逻辑说明

  1. 提前定义映射表value_map,解耦规则和处理逻辑,后续需要新增、修改匹配规则仅需调整该映射表即可。
  2. 按行遍历原始数据:
    • 若当前行value属于A/B/C,拆分生成两行:第一行使用映射后的type,保留原始value;第二行保留原始oth类型,value设为字符型缺失值。
    • 若当前行value为D,直接保留原始行不做修改。
  3. 取消行分组得到最终处理结果,输出结果和给出的预期完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:48:01