r - 如何解决,问题 w mutate 必须是大小 1,而不是 2
问题描述
我有一个简单的 df,其中包含列(segment、study_name、Effective_Overall_TopboxMean 和其他一些基于数值的字段)。
输入在这里:
structure(list(segment = c("Developers", "lowcode"), study_name = c("DeleteMe",
"DeleteMe"), Effective_Overall_TopboxMean = c(0.96875, 0.5),
Effective_Effective_TopboxMean = c(1, 0.571428571428571),
Effective_Useful_TopboxMean = c(1,0.571428571428571),Effective_Performant_TopboxMean = c(0.916666666666667,
0.380952380952381), Efficient_Overall_TopboxMean = c(0.765625,
0.357142857142857), Efficient_Efficient_TopboxMean = c(0.78125,
0.357142857142857), Efficient_Ease_TopboxMean = c(0.796875,
0.321428571428571), Efficient_Learn_TopboxMean = c(0.6875,
0.428571428571429), Empowered_Overall_TopboxMean = c(0.8375,
0.414285714285714), Empowered_Satisfaction_TopboxMean = c(0.84375,
0.321428571428571), Empowered_Empowered_TopboxMean = c(0.75,
0.523809523809524), Empowered_Enjoyable_TopboxMean = c(0.916666666666667,
0.428571428571429), UXQ_Overall_TopboxMean = c(0.827205882352941,
0.411764705882353), USE_Mean = c(0.816825396825397, 0.816825396825397
), USE_Usefulness_Mean = c(0.851190476190476, 0.851190476190476
), USE_Ease_Mean = c(0.774891774891775, 0.774891774891775
), USE_Learning_Mean = c(0.814285714285714, 0.814285714285714
), USE_Satisfaction_Mean = c(0.844897959183673, 0.844897959183673
), USE_SNOW_Mean = c(0.811904761904762, 0.811904761904762
), UXQ_Overall_Mean = c(0.81624649859944, 0.81624649859944
), run_date = structure(c(18865, 18865), class = "Date"),
TaskCompletionRate = c(0.561904761904762, 0.561904761904762
), WeightedScore = c(0, 0), ExperienceGrade = c("F Unacceptable",
"F Unacceptable")), row.names = c(NA, -2L), groups = structure(list(
segment = c("Developers", "lowcode"), .rows = structure(list(
1L, 2L), ptype = integer(0), class = c("vctrs_list_of",
"vctrs_vctr", "list"))), row.names = c(NA, -2L), class = c("tbl_df",
"tbl", "data.frame"), .drop = TRUE), class = c("grouped_df",
"tbl_df", "tbl", "data.frame"))'
我的 if / else 语句的变异曾经可以工作,但今天它似乎已经坏了,我无法解决错误消息:”
'Error: Problem with `mutate()` column `WeightedEffective`.
ℹ `WeightedEffective = if (...) NULL`.
ℹ `WeightedEffective` must be size 1, not 2.
ℹ The error occurred in group 1: segment = "Developers".
Run `rlang::last_error()` to see where the error occurred.
In addition: Warning messages:
1: Problem with `mutate()` column `WeightedEffective`.
ℹ `WeightedEffective = if (...) NULL`.
ℹ the condition has length > 1 and only the first element will be used
ℹ The warning occurred in group 1: segment = "Developers".
2: Problem with `mutate()` column `WeightedEffective`.
ℹ `WeightedEffective = if (...) NULL`.
ℹ the condition has length > 1 and only the first element will be used
ℹ The warning occurred in group 1: segment = "Developers".
3: Problem with `mutate()` column `WeightedEffective`.
ℹ `WeightedEffective = if (...) NULL`.
ℹ the condition has length > 1 and only the first element will be used
ℹ The warning occurred in group 1: segment = "Developers".
4: Problem with `mutate()` column `WeightedEffective`.
ℹ `WeightedEffective = if (...) NULL`.
ℹ the condition has length > 1 and only the first element will be used
ℹ The warning occurred in group 1: segment = "Developers". '
这是我的脚本:
UXQ_Boxes <- mutate(UXQ_Boxes,WeightedEffective =
if (UXQ_Boxes$TaskCompletionRate >.900){
(UXQ_Boxes$Effective_Overall_TopboxMean)*1
} else {
if (UXQ_Boxes$TaskCompletionRate >.790){
((UXQ_Boxes$Effective_Overall_TopboxMean)*.9)*100
} else {
if (UXQ_Boxes$TaskCompletionRate >.650){
((UXQ_Boxes$Effective_Overall_TopboxMean)*.8)*100
} else {
if (UXQ_Boxes$TaskCompletionRate >.500){
((UXQ_Boxes$Effective_Overall_TopboxMean)*.6)*100
} else {
if (UXQ_Boxes$TaskCompletionRate >.250){
((UXQ_Boxes$Effective_Overall_TopboxMean)*.4)*100
} else {
if (UXQ_Boxes$TaskCompletionRate <.260){
((UXQ_Boxes$Effective_Overall_TopboxMean)*.2)*100
}}}}}}*6)'
任何有关如何解决此问题的建议将不胜感激。
解决方案
使用时if_else
代替if
使用mutate
UXQ_Boxes2 <- UXQ_Boxes %>%
mutate(UWeightedEffective = 6*if_else(TaskCompletionRate > .900, Effective_Overall_TopboxMean*1,
if_else(TaskCompletionRate > .790, Effective_Overall_TopboxMean*0.9*100,
if_else(TaskCompletionRate > .650, Effective_Overall_TopboxMean*0.8*100,
if_else(TaskCompletionRate > .500, Effective_Overall_TopboxMean*0.6*100,
if_else(TaskCompletionRate > .250, Effective_Overall_TopboxMean*0.4*100,
Effective_Overall_TopboxMean*0.2*100))))))
#result
UXQ_Boxes2 %>% select(last_col())
Adding missing grouping variables: `segment`
# A tibble: 2 x 2
# Groups: segment [2]
segment UWeightedEffective
<chr> <dbl>
1 Developers 349.
2 lowcode 180
我注意到在代码的最后乘以 6,我把它移到了代码的开头。我也折叠了最后一个条件UXQ_Boxes$TaskCompletionRate < .260)
,因为它没有任何意义,因为之前的条件是UXQ_Boxes$TaskCompletionRate > .250)
. 我把UXQ_Boxes$Effective_Overall_TopboxMean)*.2)*100
_else
推荐阅读
- nginx - 排查 OpenStack Octavia LBaaS v2 错误
- android - Libgdx 将分数发送到 mysql 服务器
- r - 在文档词频中查找常用词及其值
- xml - eclipse sts 4中没有集成图视图?
- webpack - 在 Webpack 中使用 Babel Loader 时如何设置 Babel 环境变量(BABEL_ENV)?
- python - 高效地将自定义函数应用于 Pandas 中的组
- java - 最佳实践:基于java的微服务日志管理,运行在k8s上
- azure - 在部署时触发 Azure 中的 webhook?
- javascript - 访问对自己类中的类的引用
- php - 如何测试 Callable 参数是否会返回带有反射的字符串?