[R] Incremental

Rui Barradas ruipbarradas at sapo.pt
Thu Oct 13 12:30:08 CEST 2016


Hello,

You must run the code to create x1 first, part 1), then part 2).
I've tested with your data and all went well, the result is the following.

 > dput(dat)
structure(list(y1 = c(39958L, 40058L, 40105L, 40294L, 40332L,
40471L, 40493L, 40533L, 40718L, 40771L, 40829L, 40892L, 41056L,
41110L, 41160L, 41222L, 41250L, 41289L, 41324L, 41355L, 41415L,
41562L, 41562L, 41586L), flag = structure(c(3L, 2L, 4L, 1L, 3L,
2L, 2L, 4L, 1L, 3L, 2L, 4L, 1L, 3L, 2L, 2L, 2L, 2L, 4L, 2L, 4L,
4L, 1L, 3L), .Label = c("H", "R", "S", "X"), class = "factor"),
     x1 = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L,
     4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L), z2 = c(0L, 100L,
     147L, 336L, 0L, 139L, 161L, 201L, 386L, 0L, 58L, 121L, 285L,
     0L, 50L, 112L, 140L, 179L, 214L, 245L, 305L, 452L, 452L,
     0L)), .Names = c("y1", "flag", "x1", "z2"), row.names = c(NA,
-24L), class = "data.frame")


Rui Barradas

Em 12-10-2016 21:53, Val escreveu:
> Rui,
> Thank You!
>
> the second one gave me NULL.
> dat$z2 <- unlist(tapply(dat$y1, dat$x1, function(y) y - y[1]))
>
> dat$z2
> NULL
>
>
>
> On Wed, Oct 12, 2016 at 3:34 PM, Rui Barradas <ruipbarradas at sapo.pt> wrote:
>> Hello,
>>
>> Seems simple:
>>
>>
>> # 1)
>> dat$x1 <- cumsum(dat$flag == "S")
>>
>> # 2)
>> dat$z2 <- unlist(tapply(dat$y1, dat$x1, function(y) y - y[1]))
>>
>> Hope this helps,
>>
>> Rui Barradas
>>
>>
>> Em 12-10-2016 21:15, Val escreveu:
>>>
>>> Hi all,
>>>
>>> I have a data set like
>>> dat<-read.table(text=" y1, flag
>>> 39958,S
>>> 40058,R
>>> 40105,X
>>> 40294,H
>>> 40332,S
>>> 40471,R
>>> 40493,R
>>> 40533,X
>>> 40718,H
>>> 40771,S
>>> 40829,R
>>> 40892,X
>>> 41056,H
>>> 41110,S
>>> 41160,R
>>> 41222,R
>>> 41250,R
>>> 41289,R
>>> 41324,X
>>> 41355,R
>>> 41415,X
>>> 41562,X
>>> 41562,H
>>> 41586,S
>>> ",sep=",",header=TRUE)
>>>
>>> First sort the data by y1.
>>> Then
>>> I want to create two columns .
>>> 1. the first new column is  (x1):  if flag is "S"  then  x1=1  and
>>> assign the following/subsequent rows 1 as well.   When we reach to
>>> the next "S"  then  x1=2 and the subsequent rows will be assigned to
>>> 2.
>>>
>>> 2. the second variable (z2). Within each x1 find the difference
>>> between the first y1 and subsequent y1 values
>>>
>>> Example  for the first few rows
>>>     y1,   flag, x1, z2
>>> 39958, S, 1,    0          z2 is calculated as     z2=(39958, 39958)
>>> 40058, R, 1, 100         z2 is calculated as     z2=(40058, 39958)
>>> 40105, X, 1, 147         z2 is calculated as     z2=(40105, 39958)
>>> 40294, H, 1, 336         z2 is calculated as     z2=(40294, 39958)
>>> 40332, S, 2,  0            z2 is calculated as     z2=(40332, 40332)
>>> etc
>>>
>>> Here is the complete output for the sample  data
>>> 39958,S,1,0
>>> 40058,R,1,100
>>> 40105,X,1,147
>>> 40294,H,1,336
>>> 40332,S,2,0
>>> 40471,R,2,139
>>> 40493,R,2,161
>>> 40533,X,2,201
>>> 40718,H,2,386
>>> 40771,S,3,0
>>> 40829,R,3,58
>>> 40892,X,3,121
>>> 41056,H,3,285
>>> 41110,S,4,0
>>> 41160,R,4,50
>>> 41222,R,4,112
>>> 41250,R,4,140
>>> 41289,R,4,179
>>> 41324,X,4,214
>>> 41355,R,4,245
>>> 41415,X,4,305
>>> 41562,X,4,452
>>> 41562,H,4,452
>>> 41586,S,5,0
>>>
>>> Val
>>>
>>> ______________________________________________
>>> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>> PLEASE do read the posting guide
>>> http://www.R-project.org/posting-guide.html
>>> and provide commented, minimal, self-contained, reproducible code.
>>>
>>



More information about the R-help mailing list