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

使用自定义R函数结合mutate across生成新变量时报错求助

问题解决步骤

1. 修正自定义函数percentages

原函数错误地使用了mutate(),而across()会将每一列作为向量传递给自定义函数,mutate()仅适用于数据框,无法处理向量,这是核心报错原因。修正后的函数直接对输入向量执行case_when()判断:

percentages <- function(x) {
  case_when(
    x < 25 ~ "Menos 25%",
    x < 50 ~ "Entre 30% 50%", 
    x < 75 ~ "Entre 50% 75%",
    x >= 75 ~ "Más 75%"
  )
}

2. 修正dplyr调用代码

原调用的换行格式可能导致语法歧义,调整为标准链式写法即可:

transp6 <- transp_articles %>% 
  mutate(across(c(perc_index_info_inst_org:perc_index_art_10_portal), percentages))

3. 关于apply调用的错误说明

原apply代码的列选择方式错误,transp_articles$col1:transp_articles$col2不是有效的列索引方式。如果一定要用apply,正确写法如下(但推荐用上面的dplyr方案,更符合tidyverse风格):

# 先提取目标列组成数据框,再用apply处理
target_cols <- transp_articles %>% select(perc_index_info_inst_org:perc_index_art_10_portal)
result <- apply(target_cols, margin = 2, percentages)
# 若要合并回原数据框:
transp6 <- cbind(transp_articles, as.data.frame(result))

额外注意事项

  • 确保目标列是数值型(numeric),如果是字符型需要先转换:mutate(across(目标列, as.numeric)),否则case_when的数值比较会报错。
  • case_when的条件是按顺序判断的,当前条件满足后不会再执行后续条件,原函数的逻辑是正确的(比如x<25先判断,剩下的x都是>=25的,再判断x<50,以此类推)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 04:30:58