Создание последовательности вектора и замена некоторых элементов - PullRequest
1 голос
/ 04 октября 2019

Я хочу это как желаемый вектор

0,2,3,0,5,0,7,0,0

Я использовал эти команды, но не смог.

b <- c(1:9)
b
x <- replace(b,b==c(1,4,6,8,9),c(0,0,0,0,0)
x
g <- (gsub(c(1,4,6,8,9),c(0,0,0,0,0),b))

Пила this перед применением этих команд.

1 Ответ

2 голосов
/ 04 октября 2019

Когда мы сравниваем b с вектором, используя ==, мы сравниваем поэлементно, поэтому b[1] сравнивается с 1, b[2] сравнивается с 4 и так далее. Поскольку length(c(1,4,6,8,9)) меньше length(b), эти значения перерабатываются для соответствия длине b.

b == c(1,4,6,8,9)
#[1]  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

Предупреждающее сообщение: In b == c (1, 4, 6,8, 9): большая длина объекта не кратна короткой длине объекта

Для сравнения нескольких значений нам нужно %in%

b %in% c(1,4,6,8,9)
#[1]  TRUE FALSE FALSE  TRUE FALSE  TRUE FALSE  TRUE  TRUE

, чтобы мы могли использовать replace like

replace(b,b %in% c(1,4,6,8,9),c(0, 0, 0, 0, 0))
#[1] 0 2 3 0 5 0 7 0 0

Однако replace может принимать вектор позиций, поэтому мы можем напрямую сделать

replace(b, c(1,4,6,8,9), 0)
#[1] 0 2 3 0 5 0 7 0 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...