【问题标题】:Double Conditioned selection of data in rr中数据的双重条件选择
【发布时间】:2014-09-17 19:22:07
【问题描述】:

我广泛阅读了有关使用 aggregate 或包 pylr 之类的功能进行条件选择的信息,但对于我的情况来说似乎还可以。

我确信编程并不难,但我想要一些输入。 基本上如何开始,你会遵循什么推理路线。

感谢您的建议。

所以我的简化数据集看起来像这样

time.stamp <- c(21.0,21.1,21.2,21.3,21.4)
behavior <- c("close", "1", "close","1","close")
event_type <- c("start","point","stop","point","start")

example <- data.frame(time.stamp,behavior,event_type)



  time.stamp behavior event_type
1       21.0    close      start
2       21.1        1      point
3       21.2    close       stop
4       21.3        1      point
5       21.4    close      start

我的研究问题是:行为==关闭期间的行为数==1。

例如,在这种情况下,答案是 1 因为第二个 1 在 Close&Stop 之后。

在其他可能的解决方案中,我想到了在 close&start 和 close&stop 之间的 time.stamps 范围的子集,但我不知道如何在代码中翻译它。

正如我所说,我很想就如何思考这个问题提供一些意见。

非常感谢, 我希望能学到一些东西。 干杯

【问题讨论】:

  • 是的,如果前一个 event_type==start 和“close”开始,则 behavior==1 的情况的数量/计数,而不是我没有保留的其他可能类型的行为很简单。感谢您的努力理解

标签: r sum range selection


【解决方案1】:

我想解决这个问题,你不需要任何特殊的包。仅使用“基础”:

length( which( example$behavior[which( example$behavior == 'close' &amp; as.character(example$event_type) == 'stop')+1] == 1 ) )

编辑:清除所需输出后,代码更改为:

sum((which( example$behavior == 'close' & as.character(example$event_type) == 'stop') - which( example$behavior == 'close' & as.character(example$event_type) == 'start')) - 1)

最好, 阿迪_

【讨论】:

  • 谢谢。你的建议的问题是我经常有不止一个 1 (对不起双关语)。你会建议引入一个 for 循环来解决这个问题吗?
  • 我不太确定你所说的超过 1 是什么意思?
  • 用下面的新数据集试试你的代码,你就会明白time.stamp &lt;- c(21.0,21.1,21.11,21.12,21.2,21.3,21.4,21.5) behavior &lt;- c("close", "1","1","1", "close","1","close","close") event_type &lt;- c("start","point","point","point","stop","point","start","stop") example &lt;- data.frame(time.stamp,behavior,event_type)
  • 我还是一头雾水。在新数据集中,只有第 6 行符合您的条件,因此 count == 1。这就是我的代码返回的内容。我怎么理解不好?
  • 您的代码返回 1 但正确答案是 3,因为在 behavior=close & event_type=start 和 behavior=close & event_type=stop 之间只有三个 1
【解决方案2】:

我会这样做:

n = nrow(example)
length(which(example$behavior[2:n]==1 & example$event_type[1:n-1]!= "stop"))

【讨论】:

  • 实际上它只在这种特定情况下有效,因为行数为 1 并不总是[1:n-1]!= "stop"。但无论如何,谢谢是一个起点
猜你喜欢
  • 2015-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-09
  • 2015-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多