考虑一个向量x:
x <- c(0, 5, 10, 25, 30)
我想创建一个带有“缺失值”的新向量,这意味着如果我的序列间隔为5,则“跳过”所有值。
因此,对于此示例,输出应为:
xna <- c(15, 20)
此外,我必须创建一个函数,以便我可以对任何向量x执行此操作。
nats <- function(x){
lastvalue <- x[length(x)]
firstvalue <-x[1]
xseq <- seq(firstvalue, lastvalue, 5)
for i in xseq {
# if x is not in x seq put it into a vecotr xna #
}
xna
}
我真的不知道该怎么做。非常感谢建议,或者是否已有可以执行此操作的功能。
请帮忙,
答案 0 :(得分:3)
如果你需要作为一个功能,
nats <- function(x, interval){
lastvalue <- x[length(x)]
firstvalue <-x[1]
xseq <- seq(firstvalue, lastvalue, interval)
xna <- xseq[!xseq %in% x]
return(xna)
}
x <- c(0,5,10, 15,25,30)
nats(x, 5)
#[1] 20
x <- c(3, 6,18)
nats(x, 3)
#[1] 9 12 15
答案 1 :(得分:1)
基础R中的解决方案(参见?setdiff
)
# Your data
x <- c(0, 5, 10, 25, 30)
# Your sequence
y <- seq(0, max(x), by = 5);
# "Skipped" values
s <- setdiff(y, x);
print(s);
[1] 15 20
答案 2 :(得分:0)
使用%in%
运算符。见https://stat.ethz.ch/R-manual/R-devel/library/base/html/match.html
xna <- xseq[!xseq%in%x]