我有以下数据:
df <- data.frame(Start = c(1,11,26), End = c(10,25,30), Mean = c(0.04349, 0.12, 0.04))
#df
# start End Mean
#1 1 10 0.04349
#2 11 25 0.12000
#3 26 30 0.04000
由此,我想构建一个向量,其条目为Mean
,索引由start
和end
确定。
换句话说,向量将0.04349
作为从索引1到索引10的条目,然后向量条目的值将从索引11到25等0.12
。是预期的结果:
> res = c(rep(0.04349, df$End[1] - df$Start[1] + 1), rep(0.12, df$End[2] - df$Start[2] + 1), rep(0.04, df$End[3] - df$Start[3] + 1))
> res
[1] 0.04349 0.04349 0.04349 0.04349 0.04349 0.04349 0.04349 0.04349 0.04349 0.04349 0.12000 0.12000 0.12000 0.12000 0.12000 0.12000 0.12000 0.12000
[19] 0.12000 0.12000 0.12000 0.12000 0.12000 0.12000 0.12000 0.04000 0.04000 0.04000 0.04000 0.04000
但我上面获得它的方式非常低效,特别是对于大量的行。
是否有一种直接的方法来构造这个没有任何for循环的向量?实际上,数据框有很多行。
谢谢!
答案 0 :(得分:3)
在您更新的帖子中,您几乎就在那里:
with(df, rep(Mean, times=End-start+1))
答案 1 :(得分:0)
library(data.table)
df <- data.table(df)
df[,list(someindex = start:End), by = Mean]