使用相对于向量中第一个值的值填充空向量

时间:2016-10-14 20:40:18

标签: r vector

我有一个矢量:

sample.vector
      1
      1
      0
      0
      14
      1
      1
      0
      1
      12

我使用以下代码创建了第二个向量:

second.vector <- c(1, rep(NA, length(sample.vector)))

这使得:

second.vector
      1
      NA
      NA
      NA
      NA
      NA
      NA
      NA
      NA
      NA
      NA

我想填充second.vector,以便将NA替换为0 +上面一行中的值(即第二个向量的第一行中的1){{1}如果sample.vector < 3,或者1 +上面一行中的值(即该值可能是什么)。

换句话说:

  

R,我想让你看看sample.vector > 3中的行[n]。如果该值小于3,我希望您将sample.vector中的NA替换为高于该NA的值。如果row [n]中的值大于3,我希望您使用高于该NA的值填充second.vector中的NA,但是将其加1。

     

second.vector中的每一行执行此操作,以便sample.vector中的每个NA都替换为值。

所以我希望获得的矢量是:

second.vector

我试过这个:

second.vector
      1
      1
      1
      1
      1
      2
      2
      2
      2
      2
      3

但它只是给第二行second.vector[2:length(second.vector)] <- ifelse(sample.vector[1:length(sample.vector)] > 3, second.vector[1:length(second.vector)]+1, second.vector[1:length(second.vector)]+0) 一个1,而不是填满整个向量。

关于如何做到这一点的任何想法?

1 个答案:

答案 0 :(得分:2)

cumsum()会返回累计金额。例如,cumsum(c(3, 7, 1))[1] 3 10 11

sample.vector <- c(1,1,0,0,14,1,1,0,1,12)
library(dplyr) # just to explain

(sample.vector > 3) %>% # [1] FALSE FALSE FALSE FALSE TRUE ...
  as.numeric()  %>%     # [1] 0 0 0 0 1 ...  # but this line is unnecessary, thanks @Pierre Lafortune
    cumsum()  %>%       # [1] 0 0 0 0 1 1 1 1 1 2  # do cumulative sums
      + 1               # [1] 1 1 1 1 2 2 2 2 2 3  # what you want

# summarizing the above,
cumsum(sample.vector > 3) + 1
相关问题