如何用对应向量元素对数据框超阈值的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
相关产品推荐
相关产品推荐

