我有一个向量和一个数据帧:
vec <- rnorm(100)
df <- data.frame(factor = c(3, 5, 8), start = c(1, 30, 60), end = c(29, 59, 100)
所以数据帧看起来是这样的:
factor start end
1 3 1 29
2 5 30 59
3 8 60 100
我想将因子作为10的幂应用于从开始到结束的索引箱。所以vec[0:29]将乘以10^3,vec[20:59]10^5和vec[60:100]10^8。
我的真实数据集要大得多,有更多的因素,但这就是它的要点
基本R方法:
do.call(rbind,
Map(function(x, y, z) data.frame(factor = x, vec = vec[y:z]),
df$factor, df$start, df$end)) -> result
head(result)
# factor vec
#1 3 -0.56047565
#2 3 -0.23017749
#3 3 1.55870831
#4 3 0.07050839
#5 3 0.12928774
#6 3 1.71506499
编辑
也许你正在寻找这个-
result <- vec * 10^rep(df$factor, df$end - df$start + 1)
数据
set.seed(123)
vec <- rnorm(100)
df <- data.frame(factor = c(3, 5, 8), start = c(1, 30, 60), end = c(29, 59, 100))