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

在R中使用apply()函数处理数据框时如何保留非数值列

如何用apply()函数对数据框数值列应用函数并保留非数值列?

你遇到的问题是直接对包含非数值列的数据框使用apply()时会报错,仅筛选数值列处理又会丢失非数值列。可以通过修改应用的函数,让它自动判断列类型,实现仅用apply()完成需求:

步骤1:修改函数,适配数值/非数值列

调整你的函数,使其对数值列执行计算,对非数值列直接返回原数据:

sum1 <- function(x) {
  if (is.numeric(x)) {
    x + 1
  } else {
    x
  }
}

步骤2:对整个数据框执行apply()

直接对完整数据框按列应用修改后的函数,再转换为数据框:

# 示例数据框
df <- data.frame(col1 = c(1:5), col2 = c(6:10), col3 = c("x","y","z","w","x"))

# 应用函数并生成结果数据框
df_apply <- as.data.frame(apply(df, MARGIN = 2, FUN = sum1))

运行结果

执行后得到的结果就是你需要的包含所有列的数据框:

> df_apply
  col1 col2 col3
1    2    7    x
2    3    8    y
3    4    9    z
4    5   10    w
5    6   11    x

原理说明

原报错是因为sum1函数未处理非数值列,apply()遍历到字符列时尝试执行x+1触发类型错误。修改后的函数通过is.numeric()判断列类型,对非数值列直接返回原值,既完成了数值列的计算,又保留了所有列。


内容的提问来源于stack exchange,提问作者Samuel Motta Galvão

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 05:25:00