我正在尝试进行条件子集化,其中包括邻近区域窗口内的当代元素。 例如,给定矩阵Dat,其中Species(SP),Area(AR)和Time(TM):
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共存的所有物种,但在相邻区域内(在这种情况下为1和3)?所需的输出是:
SP AR TM
A 2 2
B 2 2
F 3 2
H 3 2
B 1 2
这是基于物种A将在不同区域的数据集中重复出现的假设。 我有一个尝试,由用户提供来自我之前发布的不同问题(带有相关元素)的邮件,只需稍加修改。添加了X,表示我无法弄清楚语法的一部分,这基本上是括号的定义(考虑到它或多或少应该去的地方)。
with(dat,dat[
apply(
sapply(TM[SP=="A"],
function(x) abs(AR)XXXXX),1,any
)
,]
)
非常感谢任何帮助。
这是我尝试在大型数据集上进行的一组操作的一部分。我把这个问题分成了两个元素,这些元素有些相关但远非重复。这是因为我是一个初级R用户,并希望学习如何自己解释,编写和集成代码。指向相关问题的链接:Subsetting based on co-occurrence within a time window。如果需要,我可以删除其中一个链接。
答案 0 :(得分:1)
假设邻近区域由给定区域的+/- 1区域定义:
复制上一个问题:Subsetting based on co-occurrence within a time window ...
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),]
关于Conditional subsetting by POSIXct interval and another field containing interval移除SP的条件==&#39; A&#39;应该导致正确的子集
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,]