r - 如何计算元素在时间步 t 出现的总次数?

标签 r dataframe

我是 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
我想确定每次测量的持续时间和起点。例如,有两个 10 分钟的测量从 t1(第 1 行和第 5 行)开始,有两个 30 分钟的测量从 t2(第 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)

关于r - 如何计算元素在时间步 t 出现的总次数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63908777/

相关文章:

python - 同一列的多个副本到新数据框中

r - 如何取消列表并将顶级名称保留为 R 中的新变量

python - 替换 Pandas 细胞中的一个字符

css - 从 `bookdown::gitbook` 中删除所有表格 CSS

r - 在列表中的多个数据帧上应用 lapply,R

R-paste() 函数中的新行

python - 保存行和列标题python的sklearn MinMaxScaler

r - 控制连线针织数码印花

r - 使用 dplyr 选择并绘制最高频率

Python:如何避免循环在 Pandas 数据框中进行转换?