【发布时间】:2014-11-10 13:44:03
【问题描述】:
假设我有一个指定长度的数字向量。
x = c(3,5,4,10)
然后我运行 cumsum 来获取他们的范围。
cumsum(x)
3 8 12 22
如何将每个配对以产生从 1 开始的范围对。
最好作为字符向量:
c("1-3", "3-8", "8-12", "12-22")
【问题讨论】:
假设我有一个指定长度的数字向量。
x = c(3,5,4,10)
然后我运行 cumsum 来获取他们的范围。
cumsum(x)
3 8 12 22
如何将每个配对以产生从 1 开始的范围对。
最好作为字符向量:
c("1-3", "3-8", "8-12", "12-22")
【问题讨论】:
你可以像这样使用paste:
paste(c(1, cumsum(x))[-(length(x)+1)], cumsum(x), sep = "-")
# [1] "1-3" "3-8" "8-12" "12-22"
【讨论】:
c(1, head(cumsum(x), -1)) 似乎比 c(1, cumsum(x))[-(length(x)+1)] 更好
另一种选择是使用sprintf
x1 <- c(1, cumsum(x))
sprintf('%d-%d', x1[-length(x1)], x1[-1])
#[1] "1-3" "3-8" "8-12" "12-22"
【讨论】: