Inserting new values into a vector requires to describe
where to insert the new values. The function "insert.values"
allows you to define the new position(s) by fractional
indices or by a logical vector.

"insert.values" <- function(x,pos.insert,x.insert){
# insert.values inserts x.insert into x at positions defined by
pos.insert
# Arguments:
#   x           input vector
#   x.insert    vector of new values to be stored
#   pos.insert  defines the positions of the new values in one of two
ways:
#               a) pos.insert is a vector of fractional numbers of the
same length
#                  as x.insert: x.insert[i] will be inserted between
#                  x[ floor(pos.insert) ] and x[ ceiling(pos.insert) ]
#               b) pos.insert is of mode logical with length(x) values
FALSE
#                  and length(x.insert) values TRUE. Then TRUE values
indicate
#                  the position of the new elements and FALSE the values

#                  of old ones
#
# Examples:
#   > x<-1:5
#   > insert.values(x, 2.5, 1000)
#   [1]    1    2 1000    3    4    5
#   > insert.values(x, (1:5)+.2, 1001:1005)
#   [1]    1 1001    2 1002    3 1003    4 1004    5 1005
#   > insert.values(x, .9, 1111)
#   [1] 1111    1    2    3    4    5
#   > insert.values(x, c(T,rep(F,5)), 1000)
#   [1] 1000    1    2    3    4    5
#   > insert.values(x, c(rep(F,5),T), 1000)
#   [1]    1    2    3    4    5 1000
#   > insert.values(x, rbind(rep(F,5),T), 1001:1005)
#   [1]    1 1001    2 1002    3 1003    4 1004    5 1005
# pw 02/2003
  if(is.logical(pos.insert)){
    pos.insert <- pos.insert[pos.insert]/length(pos.insert) +
cumsum(!pos.insert)[pos.insert]
  }
  x<-c(x,x.insert)[order(c(seq(x),pos.insert))]
  return(x)
}

Peter Wolf
--------------------------------------
Dr. Agustin Lobo wrote:
> I've searched the doc for insert
> and could not find the way to do the following,
> hope someone can help:
>
> Let's say we have a vector:
> > a
> [1] "1" "2" "3" "5" "6" "3"
>
> and we want to insert a "7" after
> any given "3", i.e., we want vector a
> to become:
>
> [1] "1" "2" "3" "7" "5" "6" "3" "7"

-------------------------------------------------------------------------------
 Peter Wolf,   Statistik/Informatik,   Fak.f.Wiwi,   Uni Bielefeld
 [EMAIL PROTECTED], http://www.wiwi.uni-bielefeld.de/~wolf/wolf.html
-------------------------------------------------------------------------------



        [[alternate HTML version deleted]]

______________________________________________
[EMAIL PROTECTED] mailing list
http://www.stat.math.ethz.ch/mailman/listinfo/r-help

Reply via email to