Суммирование множества векторов; по ряду или по элементам, но игнорируя значения NA

Я пытаюсь создать новый вектор, который является суммой из 35 других векторов. Проблема в том, что существует множество значений NA, но для этого конкретного использования я хочу рассматривать их как нули. Добавление векторов не будет работать, потому что если любой из 35 векторов содержит NA, результатом будет NA. Вот пример проблемы:

col1<-c(NA,1,2,3)
col2<-c(1,2,3,NA)
col3<-c(NA,NA,2,3)
Sum<-col1+col2+col3
Sum
# [1] NA NA  7 NA

Я хочу, чтобы результат был 1, 3, 7, 6.
Я полагаю, что я мог бы создавать новые версии каждого из векторов, в которых я заменяю NA на 0, но это было бы большой проблемой при применении к 35 векторам. Есть ли простая функция, которая поможет мне?

Ответ 1

Может также использоваться функция rowSums:

rowSums( cbind (col1,col2,col3), na.rm=TRUE)
#[1] 1 3 7 6

?rowSums   # also has colSums described on same help page

Ответ 2

Сначала поместите их в матрицу:

apply(cbind(col1,col2,col3),1,sum,na.rm = TRUE)
[1] 1 3 7 6

Вы можете прочитать о каждой функции здесь, используя встроенную документацию R: ?apply, ?cbind.

cbind означает "связывание столбцов": он принимает несколько векторов или массивов и связывает их "по столбцу" в один массив:

cbind(col1,col2,col3)
     col1 col2 col3
[1,]   NA    1   NA
[2,]    1    2   NA
[3,]    2    3    2
[4,]    3   NA    3

apply, ну, в этом случае применяется функция (sum) к строкам или столбцам матрицы. Это позволяет нам использовать аргумент na.rm = TRUE для sum, чтобы значения NA были опущены.