r - 具有不同选择的 R IF 语句
问题描述
再见,
我已经收集了很多反馈来创建一个可重复的示例和我的编码尝试。
这是一个示例数据框:
df <- data.frame("STUDENT" = 1:10,
"test_FALL" = c(0, 0, 0, 0, 1, 1, 1, 0, 0, NA),
"test_SPRING" = c(1, 1, 1, 1, 0, 0, 0, 1, 1, 1),
"score_FALL" = c(53, 52, 98, 54, 57 ,87, 62, 95, 75, NA),
"score_SPRING" = c(75, 54, 57, 51, 51, 81, 77, 87, 73, 69),
"final_SCORE" = c(75, 54, 57, 51, 57, 87, 62, 87, 73, 69))
和示例代码:
df$final_score[df$test_SPRING == 1] <- df$score_SPRING
df$final_score[df$test_FALL == 1] <- df$score_FALL
第二次尝试代码:
df$final_score1[(df$test_SPRING == 1 & !is.na(df$test_SPRING))] <- df$score_SPRING
df$final_score1[(df$test_FALL == 1 & !is.na(df$test_FALL))] <- df$score_FALL
在我的数据框中,我有一个学生参加考试(test_SPRING test_FALL)和考试成绩(score_SPRING score_FALL)。基本上我想创建包含在数据帧中的 final_SCORE 列,如果 test_SPRING = 1,tot_score = score_SPRING,否则如果 test_FALL = 1,tot_score = score_Fall。我无法这样做,并且在几个小时后无法弄清楚。请提供您可能有的任何建议。
解决方案
有几种方法可以创建“final_score”。
1)使用ifelse
- 基于示例,“测试”列是互斥的。ifelse
因此,我们可以通过检查基于'test_SPRING'(test_SPRING == 1
)的条件来使用单个。如果为 TRUE,则获取“score_SPRING”,否则获取“score_FALSE”
with(df, ifelse(test_SPRING == 1, score_SPRING, score_FALL))
#[1] 75 54 57 51 57 87 62 87 73 69
2)算术 - 数字乘以 1 是数字本身,0 给出 0,因此将“分数”列与相应的“测试”列相乘,cbind
并使用rowSums
with(df, NA^(!test_FALL & !test_SPRING) * rowSums(cbind(
score_SPRING * test_SPRING,
score_FALL * test_FALL),
na.rm = TRUE))
#[1] 75 54 57 51 57 87 62 87 73 69
推荐阅读
- git - 当一个引用指针指向两个不同的提交时,这意味着什么?
- dataweave - Dataweave 递归限制?
- ios - 如何在 Swift 中使用 UICollectionView 修复“NSInternalInconsistencyException”错误?
- php - 如何在 WordPress 循环中获取 ACF 字段值?
- ruby-on-rails - 我从正在创建的应用程序中收到路由错误消息
- elixir - 如何在字符串类型上编写协议?
- python - 安装熊猫失败:错误:由于环境错误而无法安装软件包:
- runtime-error - MethodError 在运行时用于编译版本的 Julia 应用程序,否则运行良好
- postgresql - 用于 LDAP 身份验证 postgres 的 JDBC 连接字符串
- excel - 是否有缩短嵌套 If...Then...Else 语句的方法?