Добавление нескольких векторов в R - PullRequest
3 голосов
/ 16 марта 2010

У меня есть проблема, когда я должен добавить тридцать три целочисленных вектора равной длины из набора данных в R. Я знаю, что простое решение будет

Vector1 + Vector2 + Vector3 +VectorN

Но я уверен, что есть способ закодировать это. Также в некоторых векторах вместо целых чисел есть NA, поэтому мне нужен способ их пропустить. Я знаю, что это может быть очень просто, но я новичок в этом.

Ответы [ 5 ]

7 голосов
/ 17 марта 2010

Вот еще один способ, отбрасывать NA при суммировании векторов:

df <- data.frame(vector1, vector2, vector3, vector4)
rowSums(df, na.rm=T)
1 голос
/ 17 марта 2010

На самом деле это не так просто, как может показаться. Я считаю, что вы хотите избавиться от NA и заменить их на 0 (нули). Еще одно решение:

# create dummy variables
set.seed(1234)
x <- round(rnorm(10, 15, 3.2))
y <- round(runif(10, 12, 27))
z <- round(rpois(n = 10, lambda = 5))
# create some NA's
x[c(2,3)] <- NA
y[c(1,3,7)] <- NA
z[c(3,6,10)] <- NA

А теперь, если вы сделаете:

x + y + z  # the result is:
[1] NA NA NA 20 31 41 NA 39 37 25

Итак, запустите:

x[is.na(x)] <- 0
y[is.na(y)] <- 0
z[is.na(z)] <- 0

отсюда:

x + y + z  # yields:
[1] 16 21  0 25 34 41 16 42 48 25

Но, честно говоря, я рекомендую вам придерживаться решения @ xiechao ! Это довольно легко и просто!

0 голосов
/ 19 апреля 2019
add = function(...) {
  vectors = list(...)
  res=vectors[[1]]
  for(i in vectors[-1]) res = res + i
  return(res)
}

add(1:3,4:5,1:3)
0 голосов
/ 26 декабря 2018

вот где mapply подходит к своему полю:

mapply(sum,Vector1,Vector2,Vector3,VectorN,na.rm = TRUE)

простой умный и понятный

0 голосов
/ 17 марта 2010
do.call("+", list(vector1, vector2, vector3, vector4))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...