r - 如何计算元素在时间步 t 的出现总数?
问题描述
我是 R 的初学者,但我想编写一段代码,需要一些 R 和数据科学知识。
我有一个具有以下结构的数据框;t1 表示 10 分钟的时间段,1 定义测量值。
t1 t2 t3 t4
1 0 0 0
1 1 1 1
0 1 1 1
0 1 1 1
1 0 1 1
我想确定每次测量的持续时间和起点。例如,有两个从 t1 开始的 10 分钟测量(第 1 行和第 5 行),有两个从 t2 开始的 30 分钟测量(第 3 行和第 4 行)。
输出:
duration_minutes t1 t2 t3 t4
10 2 0 0 0
20 1 0 1 0
30 0 2 0 0
40 1 0 0 0
有没有办法将计数转换为百分比?
df<-structure(list(t1 = c(1, 1, 0, 0,1),
t2 = c(0, 1, 1, 1,0), t3 = c(0, 1, 1, 1,1), t4 = c(0, 1, 1, 1,1)), row.names = c(NA,5L), class = "data.frame")
解决方案
我首先将数据转换为长格式,然后计算连续的 1 以确定每次测量的持续时间,从而解决了这个问题。然后我计算每个持续时间在每个开始时间出现的频率,并返回到更广泛的格式以获得您描述的输出(我没有找到 t4 列,因为它没有任何新的测量值):
library(tidyr)
library(dplyr)
df %>%
mutate(rownr = 1:nrow(.)) %>%
pivot_longer(names_to = 'time', values_to = 'value', cols = 1:4) %>%
group_by(rownr, grp = cumsum(value == 0)) %>%
mutate(duration = 10 * cumsum(value)) %>%
filter(duration != 0) %>%
summarise(time = first(time),
duration = max(duration)) %>%
group_by(time, duration) %>%
count() %>%
pivot_wider(names_from = time, values_from = n, values_fill = 0) %>%
arrange(duration)
推荐阅读
- metadata - 更新 Stripe 元数据示例
- apache - htaccess 从 http 重写为 https
- javascript - 使用“getElementById”只让字母&数字&下划线输入
- javascript - React-Native Firebase 身份验证
- c# - 将元素属性绑定到以下元素属性
- java - 在 SQL 中使用批量更新时出现错误 MySQLNonTransientConnectionException
- python - 如何使用 dbus 为函数编写单元测试以从 Spotify 获取信息?
- swi-prolog - swi prolog 中提出的初始化目标
- javascript - 如何使用 Reach Router 将渲染方法作为属性包含到 Route?
- python - 如果重复该 tuple[0:2],我想将元组值添加到元组,如下所示: