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

基于列更新DataFrame:新增总分及预期分关联字段需求

处理百万级DataFrame的字段新增与条件填充

针对你的需求,这里提供两种高效处理百万级数据的实现方式,分别基于dplyr(tidyverse生态)和data.table,后者在大数据量下性能更优:

方式一:使用dplyr(tidyverse)

library(dplyr)

# 加载示例数据
df <- data.frame(total_score=c(4.5,12.2,4.6,9.2,12.2,36.4),
                 expected_score=c(4.5,12.1,NA,9.2,12.2,NA),
                 Region1=c("All region",NA,NA,"All region","All region",NA),
                 Region2=c("EAST","EAST","EAST","EAST","EAST",NA),
                 Region3=c("West",NA,"West","West","West","West"))

# 新增total_score和expected_score的对应字段
df_processed <- df %>%
  mutate(
    # 处理total_score关联字段
    t_region1 = if_else(Region1 == "All region", total_score, NA_real_),
    t_region2 = if_else(Region1 == "All region", total_score, NA_real_),
    t_region3 = if_else(Region1 == "All region", total_score, NA_real_),
    # 处理expected_score关联字段
    e_region1 = if_else(Region1 == "All region", expected_score, NA_real_),
    e_region2 = if_else(Region1 == "All region", expected_score, NA_real_),
    e_region3 = if_else(Region1 == "All region", expected_score, NA_real_)
  )

# 查看处理结果
print(df_processed)

方式二:使用data.table(大数据量首选)

library(data.table)

# 转换为data.table格式
dt <- as.data.table(df)

# 批量新增字段,利用data.table原地赋值语法
dt[Region1 == "All region", `:=`(
  t_region1 = total_score,
  t_region2 = total_score,
  t_region3 = total_score,
  e_region1 = expected_score,
  e_region2 = expected_score,
  e_region3 = expected_score
)]

# 非目标行的字段默认会是NA,若需要显式统一设置可补充:
# dt[Region1 != "All region", `:=`(t_region1=NA_real_, t_region2=NA_real_, t_region3=NA_real_, e_region1=NA_real_, e_region2=NA_real_, e_region3=NA_real_)]

# 查看处理结果
print(dt)

说明

  • 两种方式均避免了逐行循环,适合百万级数据的高效处理
  • data.table的:=赋值是原地修改,内存占用更低、处理速度更快,更适合超大数据场景
  • 使用NA_real_是为了保证字段类型统一(数值型),避免隐式类型转换引发的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 18:57:26