используя заменить более эффективно в R - PullRequest
0 голосов
/ 21 ноября 2018

Я кодирую в R, и я хочу заменить все значения в данном векторе, которые больше 0,5 с 1, и любое значение, которое меньше 0,5 с -1.Я знаю, как сделать это с помощью двух последовательных вызовов для «замены», таких как:

my_nums <- c(0.2,0.8,0.3,0.4)
my_nums_adj_temp <- replace(my_nums,my_nums>0.5,1)
my_nums_adj <- replace(my_nums_adj_temp,my_nums<0.5,-1)

И поэтому «my_nums» переходит от

> my_nums
[1] 0.2 0.8 0.3 0.4

к

> my_nums_adj
[1] -1  1 -1 -1

Но есть ли способ сделать это всего лишь одним вызовом для «замены»?

1 Ответ

0 голосов
/ 21 ноября 2018

Возвращает то же значение, что и код в вопросе;однако, если вы действительно хотите вернуть 0 для компонента ввода, если этот ввод равен .5 (а не возвращать .5, что возвращает код в вопросе), пропустите второй член или если вы хотите вернуть какое-то другое значение вв этом случае замените второй .5 этим значением.

sign(my_nums - .5) + .5 * (my_nums == .5)
## [1] -1  1 -1 -1

Если вы хотите вернуть 1, если входное значение больше или равно .5 и -1, если оно меньше, чем мы могли бы использовать.Для каждого компонента ввода только одно из двух слагаемых может быть ненулевым, поэтому результат будет 1 или -1 для каждого компонента.

(my_nums >= .5) - (my_nums < .5)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...