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

R语言条件赋值问题:基于规则生成新列Column D

解决方案:R语言实现条件分组计算生成新列

首先还原你的示例数据:

df <- data.frame(
  Column_A = c("Panda", "Monkey", "Monkey", "Panda"),
  Column_B = c("Variant 1", "Variant 2", "Variant 1", "Variant 3"),
  Column_C = c(10.0, 5.0, 7.0, 8.0),
  stringsAsFactors = FALSE
)

方法1:使用dplyr(推荐,可读性高)

通过分组+条件判断实现需求,逻辑清晰:

library(dplyr)

df <- df %>%
  group_by(Column_A) %>%
  mutate(
    Column_D = ifelse(
      Column_B == "Variant 2",
      # Variant 2行:当前Column_C + 同组内Variant 1的Column_C值
      Column_C + Column_C[Column_B == "Variant 1"],
      # 其他行:直接取Column_C
      Column_C
    )
  ) %>%
  ungroup()

运行后得到的结果与你预期一致:

Column_AColumn_BColumn_CColumn_D
PandaVariant 110.010.0
MonkeyVariant 25.012.0
MonkeyVariant 17.07.0
PandaVariant 38.08.0

方法2:Base R实现(无需额外包)

若不想加载dplyr,可使用ave()函数完成分组取值:

df$Column_D <- with(df,
  ifelse(
    Column_B == "Variant 2",
    Column_C + ave(Column_C, Column_A, FUN = function(x) {
      # 提取当前组内Variant 1对应的Column_C值
      x[df$Column_B[df$Column_A == unique(df$Column_A)] == "Variant 1"]
    }),
    Column_C
  )
)

注意事项

  • 假设每组(同一Column_A)内仅存在一个Variant 1条目,如果有多个,可将Column_C[Column_B == "Variant 1"]替换为sum(Column_C[Column_B == "Variant 1"])或mean(...)等聚合逻辑
  • 若数据中存在某组没有Variant 1的情况,建议添加ifelse(is.na(...), Column_C, ...)处理空值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 10:02:39