R dplyr中mutate报错'must be size 1, not 2'的解决求助
问题原因
- 原生R的
if仅支持长度为1的逻辑判断,你传入了整列(长度大于1)作为判断条件,因此触发警告,仅使用列的第一个元素做判断,和预期的逐行计算逻辑不符。 - 你在
mutate内使用了UXQ_Boxes$的写法直接引用全量数据列,没有适配分组运算的规则,分组后每组仅1行,但你返回了长度为2的全列结果,因此触发大小不匹配的报错。
解决方案
推荐使用dplyr::case_when改写逻辑,语法更清晰,天然适配dplyr的运算和分组规则,也不需要嵌套多层if/else:
UXQ_Boxes <- UXQ_Boxes %>% mutate(WeightedEffective = 6 * case_when( TaskCompletionRate > 0.9 ~ Effective_Overall_TopboxMean * 1, TaskCompletionRate > 0.79 ~ Effective_Overall_TopboxMean * 0.9 * 100, TaskCompletionRate > 0.65 ~ Effective_Overall_TopboxMean * 0.8 * 100, TaskCompletionRate > 0.5 ~ Effective_Overall_TopboxMean * 0.6 * 100, TaskCompletionRate > 0.25 ~ Effective_Overall_TopboxMean * 0.4 * 100, TaskCompletionRate < 0.26 ~ Effective_Overall_TopboxMean * 0.2 * 100 ))
如果要保留原来的嵌套判断写法,只要删除所有UXQ_Boxes$前缀,同时把if替换为逐行运算的ifelse即可。
内容的提问来源于stack exchange,提问作者mdutton27
相关产品推荐
相关产品推荐

