我正在学习改进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等效命令。非常感谢。
答案 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)