如何用apply函数替换循环并修改原始数据框?
如何用apply系列函数修改原始数据框中的字符列为大写?
你的原有代码存在两个关键问题:
for循环里修改的i是合并向量c中元素的副本,完全不会影响原始数据框的列;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
相关产品推荐
相关产品推荐

