这是我的数据示例:
row Grade1 Grade2 Grade3 Points1 Points2 Points3
1 6 4.5 NA 7 5 4
2 NA 7 8 7 5 4
每行,只要成绩列中的相应结果为5.5或更高,我都希望获得“积分”列的总和。因此,对于第1行,结果将为7(仅Grade1为5.5或更高,并且Grade1对应于Points1)。对于第2行,结果为9:2级和3级为5.5或更高,因此我们将Point2(5)和Points3(4)相加。
如何让R做到这一点?
答案 0 :(得分:1)
dat <- data.frame(Grade1 = c(6, NA), #create data
Grade2 = c(4.5, 7), Grade3 = c(NA, 8), Points1 = c(7, 7),
Points2 = c(5, 5), Points3 = c(4, 4))
R矩阵运算是您的朋友。 dat[, c('Grade1', 'Grade2', 'Grade3')] > 5.5
是条件“等级> 5.5”的TRUE/FALSE/NA
矩阵,然后我们将其乘以等级矩阵。
tmp <- (dat[, c('Grade1', 'Grade2', 'Grade3')] > 5.5) *
dat[, c('Points1', 'Points2', 'Points3')]
我们得到的是一个矩阵,其中只有大于5.5级的分数得以幸存:
tmp
#Points1 Points2 Points3
#1 7 0 NA
#2 NA 5 4
最后将幸存的点求和以得到所需的结果:
rowSums(tmp, na.rm = TRUE)
# [1] 7 9