【问题标题】:Error message for counting the number of peaks within a time range计算某个时间范围内的峰值数量的错误消息
【发布时间】:2015-10-17 01:52:12
【问题描述】:

我正在使用以下代码计算两个时间点之间的峰值数量:

sum(peaks>=1 & peaks<=25)

但是,我不断收到以下消息:

Error in peaks >= 1 : 
  comparison (5) is possible only for atomic and list types

x 和 y 变量都是数字,所以我不确定为什么会收到此错误消息。这是一些示例数据的摘录:

0   0    
1   0
2   0
3   0
4   0
5   14.6464
6   14.6464
7   14.6464
8   14.6464
9   16.7139
10  20.8488
11  20.8488
12  19.0305
13  15.3939
14  15.3939
15  15.3939
16  15.0954
17  14.4985
18  14.4985
19  14.4985
20  15.2851
21  16.8582
22  16.8582
23  16.796
24  16.6715
25  16.6715

我对此进行了研究,但其他错误消息的原因并未适用于 this examplethis one

【问题讨论】:

  • 您需要说明您的子集,然后将sum 应用于此子集。一般形式为sum(vector_of_something[vector_of_something_else&gt;=1 &amp; vector_of_something_else&lt;=25)。如果是 data.frame dfsum(df$vector_of_something[df$vector_of_something_else&gt;=1 &amp; df$vector_of_something_else&lt;=25)with(df, sum(vector_of_something[vector_of_something_else&gt;=1 &amp; vector_of_something_else&lt;=25))
  • @Pascal 感谢您的回复。子集有何不同?总和(df$peak[df$peak>=1 & df$peak
  • 您能提供更多信息吗?就像您提到的 x 和 y 一样,它们中的哪一个是峰?或者峰值是一个数据框,您想查找数据框的所有值,它们介于指定的两个值之间?
  • @SamPassmore 峰值是我创建的一个函数,称为基于 y 的峰值。 x 是秒。 x 和 y 是原始数据。
  • 如果 peaks 是一个函数,那么这就是你的问题。你不能那样使用函数。我已经用这些信息复制了你的问题。

标签: r count sum


【解决方案1】:

您不能以这种方式使用函数。 这些比较用于子集数据,不能应用于函数

你所做的就相当于

read.csv == 1

这会产生同样的错误,显然没有任何意义

为了实现寻找数据峰值的目标。您应该尝试以下方法

这会创建一些类似于您的示例的数据 - 假设您有一个数据框

x = c(0:25)
y = runif(26, 0, 30)
data = data.frame(x = x, y = y)

在这里我们可以看到 x 的哪些索引大于 10,以及 y 的哪些索引大于 15。真正的意思是他们符合标准,错误的意思是他们不符合。在 R 中,我们可以使用 T/F 作为子集数据的工具。

data$x >= 10
data$y <= 15

在这里我们可以看到哪个符合这两个标准。又是真假。

data$x >= 10 & data$y <= 15

这向我们展示了符合该标准的行数 - 这似乎是您想要的。但不能识别它们是哪些行 - 就像上一行一样。

sum(data$x >= 10 & data$y <= 15)

如果我们真的要查看哪些行符合此条件,我建议以这种方式使用子集

subset(data, x >= 10 & y <= 15)

这将产生符合数据框中条件的所有行。

【讨论】:

  • 我有数据峰值,我正在尝试计算时间范围内的峰值数量。
猜你喜欢
  • 2017-09-15
  • 2012-03-22
  • 2023-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-26
  • 2019-11-09
相关资源
最近更新 更多