在R

时间:2018-11-21 15:16:17

标签: r replace

我正在用R进行编码,我想用1替换给定向量中大于0.5的所有值,而用-1替换小于0.5的任何值。我知道如何通过两个连续的“替换”调用来做到这一点,例如:

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 :(得分:1)

这将返回与问题代码相同的值;但是,如果您真的想为输入组件返回0(如果该输入为.5)(而不是返回问题代码返回的.5),则省略第二项,或者如果您想在其中返回其他值这种情况下,请用该值替换第二个.5。

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

如果您要在输入大于或等于.5时返回1,而在输入小于或等于1.时返回-1,则可以使用它。对于输入的每个分量,两个项之一只能为非零,因此每个分量的结果将为1或-1。

(my_nums >= .5) - (my_nums < .5)