基于其他多个列对R中的多个列求和

时间:2018-07-04 13:36:11

标签: r sum conditional-statements multiple-columns

这是我的数据示例:

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做到这一点?

1 个答案:

答案 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