Skip to content
Prev 320387 / 398502 Next

conditional Dataframe filling

Hi,
You could try:
dat1<- read.table(text="
a??? b??? c??? d
TRUE? TRUE? TRUE? TRUE
FALSE FALSE FALSE TRUE
FALSE? TRUE? FALSE? FALSE
",sep="",header=TRUE)
dat2<-dat1
?dat2[]<-t(apply(1*!dat1,1,function(x) unlist(lapply(split(x,cumsum(c(0,abs(diff(x))))),cumsum))))
?dat2
#? a b c d
#1 0 0 0 0
#2 1 2 3 0
#3 1 0 1 2
A.K.


----- Original Message -----
From: Camilo Mora <cmora at dal.ca>
To: r-help at r-project.org
Cc: 
Sent: Wednesday, March 27, 2013 4:31 AM
Subject: [R] conditional Dataframe filling

Hi everyone:

This may be trivial but I just have not been able to figure it out.

Imagine the following dataframe:
a? ?  b? ?  c? ?  d
TRUE? TRUE? TRUE? TRUE
FALSE FALSE FALSE TRUE
FALSE? TRUE? FALSE? FALSE

I would like to create a new dataframe, in which TRUE gets 0 but if false then add 1 to the cell to the left. So the results for the example above should be something like:

a? ?  b? ?  c? ?  d
0? ?  0? ?  0? ?  0
1? ?  2? ?  3? ?  0
1? ?  0? ?  1? ?  2

I wonder if you may know?.

Thanks,

Camilo




Camilo Mora, Ph.D.
Department of Geography, University of Hawaii
Currently available in Colombia
Phone:?  Country code: 57
? ? ? ?  Provider code: 313
? ? ? ?  Phone 776 2282
? ? ? ?  From the USA or Canada you have to dial 011 57 313 776 2282
http://www.soc.hawaii.edu/mora/

______________________________________________
R-help at r-project.org mailing list
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.