HI,
I am not sure whether this is what you want.
Mydata<-read.table(text="
?idxy??? ix??? iy??? country??? col5
?1??????? 1??? 1??? c1??????????? x1
?2??????? 1??? 2??? c1??????????? x2?
?3??????? 1??? 3??? c1??????????? x3??
?4??????? 2??? 4??? c1??????????? x4
?5??????? 2??? 4??? c2??????????? x5?
?6??????? 2??? 5??? c2??????????? x6
?7??????? 3??? 5??? c3??????????? x7???
?8??????? 3??? 5??? c3??????????? x8?
?9??????? 3??? 5??? c3??????????? x9
",sep="",stringsAsFactors=FALSE,header=TRUE)
country1<-as.numeric(gsub(".*(\\d+)","\\1",Mydata$country))
?Mydata1<-data.frame(ix=abs(diff(c(Mydata$ix[2],Mydata$ix))),iy=abs(diff(c(Mydata$iy[2],Mydata$iy))),country=abs(diff(c(country1[2],country1))))
?Mydata2<- Mydata[apply(Mydata1,1,function(x)
all(!duplicated(x)|!duplicated(x,fromLast=TRUE))),]
?Mydata2$border<-1
res<-merge(Mydata,Mydata2,by.x=c("idxy","ix","iy","country","col5"),by.y=c("idxy","ix","iy","country","col5"),all.x=TRUE)
?res
#? idxy ix iy country col5 border
#1??? 1? 1? 1????? c1?? x1????? 1
#2??? 2? 1? 2????? c1?? x2????? 1
#3??? 3? 1? 3????? c1?? x3????? 1
#4??? 4? 2? 4????? c1?? x4????? 1
#5??? 5? 2? 4????? c2?? x5????? 1
#6??? 6? 2? 5????? c2?? x6????? 1
#7??? 7? 3? 5????? c3?? x7????? 1
#8??? 8? 3? 5????? c3?? x8???? NA
#9??? 9? 3? 5????? c3?? x9???? NA
----- Original Message -----
From: Andrew Crane-Droesch <andrewcd at gmail.com>
To: r-help at r-project.org
Cc:
Sent: Saturday, October 20, 2012 3:36 AM
Subject: [R] Help with programming a tricky algorithm
Hi All,
I'm a little stumped by the following problem.? I've got a dataset with
the following structure:
idxy? ? ix? ? iy? ? country? ? (other variables)
1? ? ? ? 1? ? 1? ? c1? ? ? ? ? ? x1
2? ? ? ? 1? ? 2? ? c1? ? ? ? ? ? x2
3? ? ? ? 1? ? 3? ? c1? ? ? ? ? ? x3
.? ? ? ? .? ? ? ? .? ? ? .? ? ? ? ? ? .
3739? ? 55? ? 67? ? c7? ? ? ? x3739
3740? ? 55? ? 68? ? c7? ? ? ? x3740
where ix and iy are interger-valued indices of the actual x and y coordinates
for the gridded data
I want to define a "border" variable that equals 1 if the cell north,
east, west, or south of it has a different value of the country variable.? So,
for the row with idxy = 1, border would equal 1 if there is any idxy with
country !=c1 and ix = 2 (or zero) or iy = 2 (or zero).
Any thoughts?
Thanks!
Andrew
______________________________________________
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.