最后序列我有这样的示例数据缺少SEQ()中的R
by<-200
to<-seq(from=by,to=35280,by=by)
问题是,在to
35200结束,并且忽略最后80我需要在作为最后值涉及。 如何实现它有没有什么简单的方法? 我试过along.with
和length.out
参数,但我不能走低谷。
最后序列我有这样的示例数据缺少SEQ()中的R
by<-200
to<-seq(from=by,to=35280,by=by)
问题是,在to
35200结束,并且忽略最后80我需要在作为最后值涉及。 如何实现它有没有什么简单的方法? 我试过along.with
和length.out
参数,但我不能走低谷。
你可以把if语句为的向量的最后一个元件,如在下面的函数:
seqlast <- function (from, to, by)
{
vec <- do.call(what = seq, args = list(from, to, by))
if (tail(vec, 1) != to) {
return(c(vec, to))
} else {
return(vec)
}
}
然后
by <- 200
to <- seqlast(from=by,to=35280,by=by)
将返回
> head(to)
[1] 200 400 600 800 1000 1200
> tail(to)
[1] 34400 34600 34800 35000 35200 35280
首先,seq()
的行为与您的示例中应该相同。你想要一些seq()
本身不会提供的东西。
一个解决方案(当然有很多)是在你的序列结束时检查天气“还有什么东西”,如果有的话,再添加一个元素。 (或修改您的序列的最后一个元素,它是不完全清楚你想达到什么目的。)像这样:
step <- 200
end <- 35280
to<-seq(from=step,to=end,by=step)
# the modulus of your end point by step
m = end%%step
# if not zero, you have something to add to your sequence
if(m != 0) {
# add the end point
to = c(to, end)
}
tail(to,2)
# 35200 35280
太好了,谢谢。它完成这项工作。 – Bury 2015-02-10 07:05:17
该解决方案不起作用。检查以下值 > end < - 10 > step < - 2 > to <-seq(from = 1,to = end,by = step) > m = end %%步骤 > if(m! = 0){ + +为= C(至,结束) +} > >尾(至) [1] 1 3 5 7 9 > >步骤< - 3 > >至< -seq(from = 1,to = end,by = step) > m = end %%步骤 > > if(m!= 0){ + +为= C(至,结束) +} >尾(至) [1] 1 4 7 10 10 – 2017-06-21 14:36:29
第一,你写没有我的解决方案 - 我的溶液作品结束= 10和步骤= 2;第二,通过使用你的解决方案,我得到[1] 1 3 5 7 9.我建议你用rm(list = ls())开始你的代码。 – djas 2017-06-21 18:42:04
在seq()
,“第二种形式的,从生成+的..直到序列值小于或等于“。而且由于35280不在请求的序列中,所以不会返回。
但是你可以在你想要包含下一个值的参数中使用一个计算。既然您知道to
的值,请为其指定一个名称并使用它。
by <- 200
out <- 35280
x <- seq(from = by, to = (out + by - out %% by), by = by)
length(x)
# [1] 177
x[length(x)]
# [1] 35400
如果要包括to
价值,即使它不是要求的顺序,你可以写一个小功能,将其添加回
seqil <- function(..., include.last = TRUE) {
x <- do.call(seq.default, list(...))
if(include.last) c(x, to) else x
}
by <- 200
x <- seqil(from = by, to = 35280, by = by)
tail(x)
# [1] 34400 34600 34800 35000 35200 35280
那么,如果我复制你的第二个代码,结果是尾巴(x) [1] 34400 34600 34800 35000 35200 200 – Bury 2015-02-10 06:56:53
什么是你想要的输出?如果你想从200到35280数到200s,那么这个函数正在做它应该做的事 – 2015-02-09 21:05:31
我知道它的确如此,但是我要求如何修改它以将最后一个值作为输出的一部分添加(即使它不是按参数完成的原始顺序)。下面的答案完成这项工作。 – Bury 2015-02-10 06:53:58