用序列填充矢量

时间:2017-11-14 20:49:13

标签: r

你能解释一下,为什么,当我用序列填充R中的向量时,我得到了这个结果:

sekv <- seq(from = 1, to = 20, by = 2)
test <- c()
for (j in sekv) {
    test[j] = j
}
test
[1]  1 NA  3 NA  5 NA  7 NA  9 NA 11 NA 13 NA 15 NA 17 NA 19

我想制作一个矢量,我可以用一些序列填充并在循环中使用它,但只能使用值,而不是NA值。有人可以帮帮我吗?

3 个答案:

答案 0 :(得分:0)

在sekv中,您目前通过2 .. 4 ..6,使用seq_along

   sekv <- seq(from = 1, to = 20, by = 2)
    test <- c()
    for (j in seq_along(sekv)) {
      test[j] = j
    }
     test

答案 1 :(得分:0)

你在测试向量中有NA的原因是你将测试向量中的第一,第三,第五,第七等元素分配为1,3,5,7等......

我仍然不太清楚你想要做什么,但一个解决方案是你可以在for循环后删除所有的NA。

sekv <- seq(from = 1, to = 20, by = 2)
test <- c()
for (j in sekv) {
  test[j] = j
}
test
# [1]  1 NA  3 NA  5 NA  7 NA  9 NA 11 NA 13 NA 15 NA 17 NA 19
test <- test[-c(which(is.na(test)))]
test
# [1]  1  3  5  7  9 11 13 15 17 19

正如@PoGibas建议的那样,如果你想删除NAs,这也有效:

test <- na.omit(test) 
test
# [1]  1  3  5  7  9 11 13 15 17 19

答案 2 :(得分:0)

实际问题是,只要您尝试使用test[j]的值为j赋值,就可以更改向量的大小。 j的最后一个值是19,因此test的大小设置为19.但是您只为少数索引分配值,即1,3,5等。其余值设置为NA。< / p>

您可以仅针对for loop中可用的项目数执行sekv来解决此问题。

sekv <- seq(from = 1, to = 20, by = 2)
test <- c()
for (j in 1:length(sekv)) {
    test[j] = sekv[j]
}
print(test)