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 <ruipbarra...@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@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.
______________________________________________
R-help@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.