種 (sp)、日 (POSIXct では日)、および面積 (ar) で構成されるこのデータセット (dat) で、日によって異なる一連の選択を行う必要があります。
sp day ar
A 1-Jan-00 2
B 1-Jan-00 6
C 2-Jan-00 2
A 2-Jan-00 1
D 2-Jan-00 4
E 2-Jan-00 12
F 3-Jan-00 8
A 4-Jan-00 3
G 4-Jan-00 2
B 4-Jan-00 1
種「A」が発生する場所をサブセット化する必要があります。ただし、選択されるエリアは、このマトリックス (dat.ar) によって与えられる日によって異なります。
day ar.select
1-Jan-00 (1,6)
2-Jan-00 (1,12)
3-Jan-00 (4,8)
4-Jan-00 (3,12)
より具体的には、2000 年 1 月 1 日に種「A」が発生する地域については、地域 1 と 6 のみが必要です。例として、この選択に対するこの例の望ましい出力を以下に示します。
sp day ar
A 2-Jan-00 1
A 4-Jan-00 3
私はまだ R のセマンティクスを学ぼうとしているので、for ループを取得することにあまり成功していません。これがどこに行くべきだと思うかのスケッチです:
dat1 = with(dat,sapply(day[sp=="A" & dat.ar$day.s[i] ],
function(x) ar == (ar[sp=="A" & day == x]==dat.ar$ar.select[j])
final=dat[rowSums(dat1) > 0, ]
dat で選択する領域を指定して、dat.ar を通過する for ループに適合する必要があると思います。しかし、for ループを取得しようとする努力にもかかわらず、私はどこにも到達していません。sapply と for ループを組み合わせることが正しい方法であるかどうかもわかりません。誰かが問題を再現したい場合:
sp=c("A","B","C","A","D","E","F","A","G","B")
day=c("1-Jan-00", "1-Jan-00", "2-Jan-00", "2-Jan-00", "2-Jan-00",
"2-Jan-00", "3-Jan-00", "4-Jan-00", "4-Jan-00", "4-Jan-00")
day=as.POSIXct(day, format="%d-%b-%y")
ar=c(2,6,2,1,4,12,8,3,2,1)
dat= as.data.frame(cbind(sp, day, ar))
day.s=c("1-Jan-00", "2-Jan-00", "3-Jan-00", "4-jan-00")
day.s=as.POSIXct(day.s, format="%d-%b-%y")
a.s=c(1,1,4,3)
a.e=c(6,12,8,12)
ar.select=paste(a.s, a.e, sep=",")
dat.ar=cbind(day.s, ar.select)
どんな助けでも大歓迎です。