R中的条件if / else语句

时间:2018-08-11 11:11:34

标签: r if-statement assign

我正在学习改进R中的编码。我有以下代码:

data$score[testA == 1] <- testA_score
data$score[testB==1] <- testB_score

所以基本上我有四列想要合并为一列:testA = 1指示学生是否参加了考试的A版,而testA_score是他们的分数; testB = 1指示学生是否参加了考试的B版,而testB_score是他们的分数。我想将此信息合并到新的列分数中。

同样,假设我有testA,testB到testH。所有值都是0或1。如果任何测试等于1,如何创建新列test_complete等于1?

基本上,作为以前的Stata用户,我正在寻找Egen rowtotal和egenrowfirst的R等效命令。非常感谢。

2 个答案:

答案 0 :(得分:1)

您可以从所有测试中取出max:由于只有1个或0个值才能完成至少一个测试,因此max等于1

  testA <- c(1,0, 0, 1,0,0,0)
  testB <- c(0, 1,0, 0, 1,0,1)
  testC <- c(0, 0, 0,1, 0, 1, 0)

  df <- as.data.frame(cbind(testA, testB, testC))
  df$completed <- apply(df[, 1:3], 1, max)

答案 1 :(得分:0)

因此,如果我理解正确,那么按行取最大值应该可以满足您的需求:

binary <- c(0,1)

df <- data.frame(
    score1 = sample(binary, 20, replace = TRUE),
    score2 = sample(binary, 20, replace = TRUE),
    score3 = sample(binary, 20, replace = TRUE)
)

df$passed <- apply(df, 1, max)

head(df)