订阅的作业中不允许使用NA

时间:2014-11-12 17:34:47

标签: r

我有一个简单的问题,但我无法掌握克服它的逻辑。

我有带有NA的数字向量,并希望对它们应用与条件相关的操作。

一个类似于我的问题的简单例子是:

x <- c(1,3,5,7,NA,2,4,6)
x[x>=5] <- c(1:8)[x>=5]
x[x<5] <- (c(1:8)*10)[x<5]

它返回错误&#34;在下标的作业中不允许使用NAs,因此我想知道什么是合理的解决方案,因为分别运行每个属性按预期工作。

我希望得到预期的结果:

[1]  10  20  3  4 NA  60  70  8

最好不必进行for循环,因为这个操作已经处于空模型的函数中,需要花费很多年的迭代次数。

提前谢谢你, 莱昂纳多

NB。 NAs表示不可用值

2 个答案:

答案 0 :(得分:12)

您的逻辑还需要排除子集中的NA。请参阅以下示例。请注意,子集向量在x被修改之前存储起来。

x <- c(1,3,5,7,NA,2,4,6)
subset1 <- x>=5 & !is.na(x)
subset2 <-  x<5 & !is.na(x)

x[subset1] <- which(subset1)
x[subset2] <- 10*which(subset2)

答案 1 :(得分:0)

我认为你正在混合作业和下标。我相信你所追求的是更接近这一点:

x <- c(1,3,5,7,NA,2,4,6)
x.greater <- c(1:8)[x>=5]
x.less <- (c(1:8)*10)[x<5]

x.greater
# 3  4 NA  8
x.less
# 10 20 NA 60 70

result <- c(x.greater, x.less)
result
# 3  4 NA  8 10 20 NA 60 70