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。我无法这样做,也无法在几个小时后解决。请提供您可能有的任何建议。
答案 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