R向量运算,插入模式之间的值

时间:2016-03-29 06:25:16

标签: r loops matrix vector

假设我有一个这样的矢量:

 [1]  0  1  0  0  0  0  0 -1  0  1  0  0 -1  0  0  1 -1

我想把这个矢量变成这样:

[1]   0 100 100 100 100 100 100 100   0 101 101 101 101   0   0 102 102

只是在[1,-1]之间插入一个值,并随索引增加。

如何在不使用循环的情况下获得此结果?

原始数据集可以通过以下代码生成:

a = c(0,1,0,0,0,0,0,-1,0,1,0,0,-1,0,0,1,-1)

3 个答案:

答案 0 :(得分:2)

我们可以使用Map获取rbind中值1和-1的位置,根据使用{{1}的位置之间的相应长度复制值100:102 },matrix创建m1 <- do.call(rbind,Map(function(x,y,z) cbind(x:y,rep(z, y-x+1)), which(a==1), which(a==-1), 100:102)) a[m1[,1]] <- m1[,2] a #[1] 0 100 100 100 100 100 100 100 0 101 101 101 101 0 0 102 102 。并用'm1'的第二列替换'a'中与'm1'中第一列位置相对应的位置。

Request.IsAuthenticated

答案 1 :(得分:2)

试试这个:

$wpq = array( 
    'orderby' => 'date',
    'order' => 'DESC',
    'posts_per_page' => 6,
    'post_type' => 'post',
    'taxonomy' => 'category', 
    'term' => 'category-slug' 
);
$recent = new WP_Query ($wpq);

答案 2 :(得分:2)

我认为这很有效,

tmp <- rle(cumsum(a) | a)
tmp$values[tmp$values] <- 99 + cumsum(tmp$values[tmp$values]) 
inverse.rle(tmp)
#  [1]   0 100 100 100 100 100 100 100   0 101 101 101 101   0   0 102 102