我有一个矢量:
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,而不是填满整个向量。
关于如何做到这一点的任何想法?
答案 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