Суммирование нескольких столбцов в R на основе нескольких других столбцов - PullRequest
0 голосов
/ 04 июля 2018

Это образец моих данных:

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 (только 1 класс - 5,5 или выше, а 1 класс соответствует баллам 1). Для строки 2 результат будет 9: класс 2 и класс 3 - 5,5 или выше, поэтому мы суммируем баллы 2 (5) и баллы 3 (4).

Как мне заставить R сделать это?

1 Ответ

0 голосов
/ 04 июля 2018
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 - это матрица TRUE/FALSE/NA для условия "оценка> 5,5", которую мы затем умножаем на матрицу оценок.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...