【发布时间】:2013-09-09 20:08:17
【问题描述】:
我正在尝试制作一个条件子集,其中包括邻近区域窗口内的当代元素。 例如,给定矩阵 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 将在不同区域的数据集中重复出现的假设。 我有一个尝试,由用户 thelatemail 从我之前发布的另一个问题(带有相关元素)给出,稍作修改。添加的 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。如果需要,我可以删除其中一个链接。
【问题讨论】:
-
R中的子集在许多在线教程中都有很好的介绍。dat[dat$TM==2,]给出了您想要的结果......但更具体地说:dat[dat$TM==2 & dat$AR %in% 1:3,]其中1:3可以是定义“相邻”区域的单独函数。 -
一般来说,至少链接到从中派生出的关键问题是一种很好的形式。就目前而言,必须去研究您之前的问题并在那里解析解决方案。如果没有这些知识,我评论中的答案是正确的,而且要简单得多。