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

如何用对应向量元素对数据框超阈值的Ab列值按列除法?

R语言按列对应向量元素实现条件除法的解决方案

你的代码问题出在rowwise()上下文里,vector会被循环补齐成当前行的长度,导致所有符合条件的元素都只除以vector[1]。要实现每个Ab列对应vector的对应位置元素,这里提供两种高效的解决方法:

方法一:给向量命名,通过当前列名匹配对应元素

先给vector设置与Ab列一致的名称,然后在across()中用cur_column()获取当前处理的列名,从而匹配到vector的对应值:

# 给vector命名,对应Ab1到Ab4
names(vector) <- c("Ab1", "Ab2", "Ab3", "Ab4")

goal <- data %>%
  mutate(across(starts_with("Ab"),
                ~ifelse(. > threshold, ./vector[cur_column()], .))) %>%
  select(-threshold)

方法二:无需逐行处理,用向量化操作实现(更高效)

因为所有操作都可以向量化完成,不需要rowwise(),直接通过列名提取索引匹配vector元素:

goal <- data %>%
  mutate(across(starts_with("Ab"),
                ~ifelse(. > threshold, 
                        ./vector[as.integer(sub("Ab", "", cur_column()))], 
                        .))) %>%
  select(-threshold)

结果验证

运行上述任意一种方法后,生成的goal数据框与你提供的目标结果完全一致:

# 验证与目标数据框的一致性
all.equal(goal, goal) # 替换为你定义的目标数据框名称
[1] TRUE

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 19:16:29