具有不同选择的R IF语句

时间:2018-08-12 14:19:55

标签: r if-statement logic

Ciao

我收到了很多反馈,以创建一个可重现的示例以及我的编码尝试。

这是一个示例数据框:

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,则将其包含在数据帧中;如果test_FALL = 1,则tot_score = score_SPRING;否则,如果test_FALL = 1,则tot_score = score_Fall。我无法这样做,也无法在几个小时后解决。请提供您可能有的任何建议。

1 个答案:

答案 0 :(得分:1)

有两种创建“ final_score”的方法。

1)-使用ifelse-根据示例,“测试”列是互斥的。因此,我们可以通过检查基于'test_SPRING'(ifelse)的条件来使用单个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相乘并使用{{ 1}}

rowSums