Нам может понадобиться replace
значения для NA, а затем получить rowSums
с na.rm = TRUE
newDF <- replace(df1[-1], df1[-1] == -1 |df1[-1] == 0, NA)
df1$Sums <- rowSums(newDF, na.rm = TRUE)
df1$Means <- rowMeans(newDF, na.rm = TRUE)
df1
# Student Resp_1 Resp_2 Resp_3 Resp_4 Resp_5 Sums Means
#1 1 894 -1 324 -1 589 1807 602.3333
#2 2 -1 -1 548 841 0 1389 694.5000
#3 3 285 216 -1 986 0 1487 495.6667
ПРИМЕЧАНИЕ. Если нам нужны значения round
ed для «Средства», используйте round(rowMeans(..
В коде ОП rowSums
берется из логического matrix
, который имеет только ИСТИНА / ЛОЖЬ или значения 1/0
данные
df1 <- structure(list(Student = 1:3, Resp_1 = c(894L, -1L, 285L), Resp_2 = c(-1L,
-1L, 216L), Resp_3 = c(324L, 548L, -1L), Resp_4 = c(-1L, 841L,
986L), Resp_5 = c(589L, 0L, 0L)), class = "data.frame", row.names = c(NA,
-3L))