0

隣接するエリアのウィンドウ内に現代的な要素を含む条件付きサブセットを作成しようとしています。たとえば、種 (SP)、面積 (AR)、時間 (TM) の行列 Dat があるとします。

SP AR TM
A  2  2
B  2  2
C  1  4
F  3  2
B  5  3
E  3  2
D  2  1
I  1  4
H  3  2
E  2  4
D  3  5
B  1  2

同時に種 A と共生するすべての種を取得するにはどうすればよいでしょうか。望ましい出力は次のとおりです。

SP  AR  TM
A  2  2
B  2  2
F  3  2
H  3  2
B  1  2

これは、種 A が異なる地域のデータセットで繰り返し発生するという仮定に基づいています。以前に投稿した別の質問 (関連する要素を含む) からのユーザー thelatemail によって、マイナーな変更を加えた試みがあります。追加された X は、私が理解できない構文の部分を示しています。これは、基本的にブラケットの定義になります (これが多かれ少なかれ、それが行くべき場所であることを考えると)。

with(dat,dat[
  apply(
    sapply(TM[SP=="A"],
    function(x) abs(AR)XXXXX),1,any
  )
,]
)

どんな助けでも大歓迎です。

これは、大規模なデータセットに対して実行しようとしている一連の操作の一部です。私はこの質問を 2 つの要素に分けました。これらは多少関連していますが、重複するわけではありません。この理由は、私が R の初心者であり、自分でコードを解釈、記述、および統合する方法を学びたいからです。関連する質問へのリンク: Subsetting based on co-occurrence within a time window。必要に応じて、リンクの 1 つを削除できます。

4

1 に答える 1

1

近隣エリアが、指定されたエリアの +/- 1 内のエリアによって定義されていると仮定します。

前の質問からのコピー:時間枠内の共起に基づくサブセット化...

with(dat,dat[
  (
    SP=="A" |
    # Area %in% Area[SP=="A"]
    Area %in% c(Area[SP=='A']-1, Area[SP=='A'], Area[SP=='A']+1)
  ) & 
  apply(
    sapply(Time[SP=="A"],
    function(x) abs(difftime(Time,x,units="mins"))<=30 ),1,any
  ) 
,]
)

コメント(および私のコメント)に従って

area <- 2
dat[dat$AR %in% c(area - 1, area, area + 1),]

また、 POSIXct interval による条件付きサブセット化と、SP=='A' の条件を削除するinterval を含む別のフィールドについては、正しいサブセット化が行われるはずです。

area_boolean <- with(dat, Area %in% c(Area[SP=='A']-1, Area[SP=='A'], Area[SP=='A']+1))
time_boolean <- with(dat, apply(sapply(Time[SP=="A"],
                                function(x) abs(difftime(Time, x, units="mins")) <= 30 ),  
                                1, 
                                any))
dat[area_boolean & time_boolean,]
于 2013-09-09T20:18:45.193 に答える