在 R 中,您可以按长度对事件之间的间隔进行分组吗?

子午线

我正在处理的数据具有成组发生的事件之间的时间间隔(即 4 个事件之间的时间间隔为 0.1 到 .2 秒,然后在另一组 6 个事件之前暂停 100 秒,它们之间的时间间隔为 0.1 到 0.2 秒)。在数据帧的末尾,它给出了一个我需要丢弃的大负数。

示例数据框:

structure(list(Interval.1 = 0.1545, Interval.2 = 0.1605, Interval.3 = 0.1795, 
               Interval.4 = 3.7845, Interval.5 = 0.14, Interval.6 = 0.1735, 
               Interval.7 = 123.559, Interval.8 = 0.6245, Interval.9 = 0.1685, 
               Interval.10 = 0.1535, Interval.11 = 0.1935, Interval.12 = 1.408, 
               Interval.13 = 0.159, Interval.14 = 0.2375, Interval.15 = 0.162, 
               Interval.16 = 0.172, Interval.17 = 4.4575, Interval.18 = 0.1865, 
               Interval.19 = 0.1545, Interval.20 = 0.1795, Interval.21 = 0.151, 
               Interval.22 = -219.9355), class = "data.frame", row.names = "a25")

我一直试图找到一种方法来分析每组中的平均事件间隔,这样我就可以比较每组事件的特征而不是整行事件(我需要比较 100 多行以这种方式进行分析,我正在尝试查看同一行中的组之间是否存在差异)。到目前为止,我一直在使用 excel 并且我已经能够通过平均所有大于 0 和小于 1 的值来找到整行的平均事件间隔,但这不允许我比较平均值的组。

我一直在使用的 excel 函数示例:

=(SUMIF(B2:BI2,">0",B2:BI2)-SUMIF(B2:BI2,">1",B2:BI2))/(COUNTIF(B2:BI2,">0")-COUNTIF(B2:BI2,">1"))

有没有办法单独计算每个组的平均值,以便我可以比较一行中的组,如果是,如何比较?

r 中的解决方案是首选,但是当找到 r 解决方案时,可以做同样事情的 Excel 函数会很有帮助。谢谢!

沉默的恶魔娃娃

我不确定我是否完全了解你想要什么,但我认为这会让你朝着正确的方向前进。首先我使用 tidyr 收集数据,所以它很长而不是宽。然后我添加了一个新列作为您尝试平均的数字的替代。然后说到我认为你问题的关键部分,如何分组。每当累积间隔大于 1 时,我都会使用 cumsum 创建一个新组。(这是我不完全确定您想如何对它们进行分组的地方)。

library(dplyr)
library(tidyr)

dat<-structure(list(Interval.1 = 0.1545, Interval.2 = 0.1605, Interval.3 = 0.1795, 
                    Interval.4 = 3.7845, Interval.5 = 0.14, Interval.6 = 0.1735, 
                    Interval.7 = 123.559, Interval.8 = 0.6245, Interval.9 = 0.1685, 
                    Interval.10 = 0.1535, Interval.11 = 0.1935, Interval.12 = 1.408, 
                    Interval.13 = 0.159, Interval.14 = 0.2375, Interval.15 = 0.162, 
                    Interval.16 = 0.172, Interval.17 = 4.4575, Interval.18 = 0.1865, 
                    Interval.19 = 0.1545, Interval.20 = 0.1795, Interval.21 = 0.151, 
                    Interval.22 = -219.9355), class = "data.frame", row.names = "a25")%>%
  gather() #Gather to make the data long, rather than wide

dat["NumberToAverage"] <- rnorm(1:nrow(dat)) #Adding a number to average when grouped

dat2<-dat%>%
  mutate("Group" = cumsum( value > 1)) #Creating a group, any time the cumulative sum is over 1, it adds a new group

dat2

显示分组外观的输出:

           key     value NumberToAverage Group
1   Interval.1    0.1545      0.35351809     0
2   Interval.2    0.1605      0.62707697     0
3   Interval.3    0.1795     -1.55307710     0
4   Interval.4    3.7845      0.16435082     1
5   Interval.5    0.1400     -0.48406590     1
6   Interval.6    0.1735      0.55728037     1
7   Interval.7  123.5590      2.15224668     2
8   Interval.8    0.6245     -1.68274497     2
9   Interval.9    0.1685     -0.02153693     2
10 Interval.10    0.1535     -0.02521306     2
11 Interval.11    0.1935     -1.85274486     2
12 Interval.12    1.4080      0.88130382     3
13 Interval.13    0.1590     -1.26127262     3
14 Interval.14    0.2375     -0.27524457     3
15 Interval.15    0.1620     -1.52575130     3
16 Interval.16    0.1720      0.02155710     3
17 Interval.17    4.4575      0.78966219     4
18 Interval.18    0.1865      1.10879272     4
19 Interval.19    0.1545     -0.83787817     4
20 Interval.20    0.1795     -0.43154448     4
21 Interval.21    0.1510     -0.18844497     4
22 Interval.22 -219.9355     -1.06143151     4

最后,分组以得出平均值和标准偏差:

dat2%>%
  group_by(Group)%>% #Group by the groups
  summarise(Mean = mean(NumberToAverage), #Mean of the NumberToAverage by Group
            SD = sd(NumberToAverage))%>% #Standard deviation of the NumberToAverage by Group
  ungroup() #From my understanding it's good practice to always ungroup in case further modification of the dataframe is needed

  Group    Mean    SD
  <int>   <dbl> <dbl>
1     0 -0.191  1.19 
2     1  0.0792 0.526
3     2 -0.286  1.62 
4     3 -0.432  0.980
5     4 -0.103  0.876

如果您需要删除某些行,例如那个负数,一个简单的 %>%filter(value > 0) dplyr 管道只会保留大于 0 的行。希望这就是您要找的!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在 R 中:根据事件的 ID 对事件序列进行分组,并计算第一个和最后一个看到的事件之间的时间差

R直方图按间隔分组

按Splunk中的多个字段对事件进行分组

使用特定条件对事件进行计数以获取 R 中的事件含义

在R中按多个约束进行分组

如何基于R中的时间间隔对数据进行分组

如何在R中的事件之间绘制日期间隔

您可以在R中的函数中使用嵌套参数吗?

按不规则时间间隔对数据进行分组和求和(R语言)

如何按周对事件进行分组和计数?

如何按年,月,日对事件列表进行分组

按年份和月份对事件进行分组

使用KnockoutJS按日期对事件进行分组

按R中的列值对表进行分组

如何按r中的时差对数据进行分组?

在 R 中按列对数据框进行分组

有一个函数可以在 R 中的字符串之间进行匹配吗?

是否可以根据特定参数对事件进行分组并在每组中运行 Flink CEP 模式?

在df中按R中不同长度组合的另一列进行分组时,获得在列中创建的所有组合的计数

您可以在SQL中按多行分组吗?

在R中按年份分组

您可以将某些组中的值放入R中的新列中吗?

(R)数月之间的间隔

在R中,您可以在df $ var命令中引用值吗?

按R中的间隔过滤列并使用ggplot()进行绘制

如何通过对 r 中的 2 列进行分组来确定唯一值的长度

在R中,您可以将文本分隔为列,以使值对齐吗?

您可以使用数据框来辅助R中的“查找和替换”吗?

您可以在R Markdown的flexdashboard中顶部对齐图或图像吗?