【问题标题】:Subsetting neighboring fileds子集相邻字段
【发布时间】: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 可以是定义“相邻”区域的单独函数。
  • 一般来说,至少链接到从中派生出的关键问题是一种很好的形式。就目前而言,必须去研究您之前的问题并在那里解析解决方案。如果没有这些知识,我评论中的答案是正确的,而且要简单得多。

标签: r subset intervals sapply


【解决方案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=='A' 的条件应该会导致正确的子集

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,]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-20
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    • 1970-01-01
    相关资源
    最近更新 更多