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

如何用apply函数替换循环并修改原始数据框?

如何用apply系列函数修改原始数据框中的字符列为大写?

你的原有代码存在两个关键问题:

  1. for循环里修改的i是合并向量c中元素的副本,完全不会影响原始数据框的列;
  2. sapply(c, toupper)仅返回处理后的结果,但没有把结果关联回原始数据框的对应列。

以下是几种可行的解决方案,既能用到apply系列函数,又能实现修改原始数据的需求:

方案1:针对目标列批量处理(结合lapply)

把需要修改的列放入列表,用lapply统一转换后再赋值回原始数据框:

# 将要修改的列存入列表
target_cols <- list(df$Station, REF$Secteur, ETAT$Secteur)
# 用lapply批量转换为大写
processed_cols <- lapply(target_cols, toupper)
# 赋值回原始数据框
df$Station <- processed_cols[[1]]
REF$Secteur <- processed_cols[[2]]
ETAT$Secteur <- processed_cols[[3]]

方案2:批量处理数据框中所有字符列

如果数据框内所有字符列都需要转大写,可以用sapply筛选字符列,再用lapply批量处理:

# 处理df中的所有字符列
df[sapply(df, is.character)] <- lapply(df[sapply(df, is.character)], toupper)
# 同理处理REF和ETAT
REF[sapply(REF, is.character)] <- lapply(REF[sapply(REF, is.character)], toupper)
ETAT[sapply(ETAT, is.character)] <- lapply(ETAT[sapply(ETAT, is.character)], toupper)

补充:单列处理无需apply

如果只是处理单个列,直接用toupper()更简洁,完全不需要apply系列函数:

df$Station <- toupper(df$Station)
REF$Secteur <- toupper(REF$Secteur)
ETAT$Secteur <- toupper(ETAT$Secteur)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 05:31:38