将向量的非零值转换为1

时间:2015-03-27 13:03:13

标签: r if-statement vector

假设我创建了以下向量:

x = c(1, 3, 5, 0, 7, 8, 0, 4, 5, 0, 8)
x

我想将非零变为1:

for (   i in 1:length(x)   ){
if (x[i]!=0)   x[i] = 1}
x

这很好用,但我想知道是否有人可以想到采用这种操作的数学方法,而不是使用if语句。

4 个答案:

答案 0 :(得分:4)

你太复杂了。无需rbind,请使用c

x = c(1, 3, 5, 0, 7, 8, 0, 4, 5, 0, 8);
x[x!=0]=1;

答案 1 :(得分:3)

官方代码书呆子方式是y <- !!x: - )

答案 2 :(得分:2)

逻辑上,只需:

as.logical(x) + 0L
#[1] 1 1 1 0 1 1 0 1 1 0 1

答案 3 :(得分:1)

这更具数学性吗?

x = c(1, 3, 5, 0, 7, 8, 0, 4, 5, 0, 8)
ceiling(x/.Machine$integer.max)

[1] 1 1 1 0 1 1 0 1 1 0 1