【问题标题】:Summing multiple columns in R based on multiple other columns基于多个其他列对 R 中的多个列求和
【发布时间】:2018-07-04 13:36:11
【问题描述】:

这是我的数据样本:

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:Grade2 和 Grade 3 为 5.5 或更高,因此我们将 Points2 (5) 和 Points3 (4) 相加。

我怎样才能让 R 做到这一点?

【问题讨论】:

    标签: r sum conditional-statements multiple-columns


    【解决方案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')] &gt; 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-03
      相关资源
      最近更新 更多