在R中创建可应用于多个数据框每行的自定义函数
解决方法
你原来的函数写法存在语法错误,函数需要先声明参数,再在函数体内实现逻辑。以下是针对需求的正确实现方案:
1. 定义通用行求和函数
直接定义接收数据框为参数的函数,利用rowSums高效计算指定列的行求和(rowSums本身就是按行计算的向量化函数,无需额外用apply,对大型数据框的处理效率更高):
apf <- function(df) { # 选取第1、3、4、7列,计算每行的和 rowSums(df[, c(1, 3, 4, 7)]) }
2. 给单个数据框添加新列
直接调用函数即可,不需要使用apply:
# 给dfn数据框添加new_c列,值为指定列的行和 dfn$new_c <- apf(dfn)
3. (可选)如果一定要用apply实现(不推荐,效率较低)
如果坚持要用apply按行处理,需要调整函数以接收单行向量作为参数:
# 接收单行向量的求和函数 apf_row <- function(row_vec) { sum(row_vec[c(1, 3, 4, 7)]) } # 用apply按行计算并添加新列 dfn$new_c <- apply(dfn, 1, apf_row)
4. 批量处理多个数据框
如果有多个数据框需要处理,建议将它们存入列表,用lapply批量操作:
# 假设你有df1、df2、df3三个数据框,先整理进列表 df_list <- list(df1 = df1, df2 = df2, df3 = df3) # 批量给每个数据框添加new_c列 updated_df_list <- lapply(df_list, function(df) { df$new_c <- apf(df) df }) # 可选:将处理后的数据框放回全局环境 list2env(updated_df_list, envir = .GlobalEnv)
内容的提问来源于stack exchange,提问作者Annah.Grace
相关产品推荐
相关产品推荐

