【问题标题】:How to cut a vector or column into intervals in R [duplicate]如何在R中将向量或列切割成区间[重复]
【发布时间】:2020-01-14 06:39:07
【问题描述】:

我在数据框中有以下列,每行之间的差异为 0.012 秒:

Time
 0
 0.012
 0.024
 0.036
 0.048
 0.060
 0.072
 0.084
 0.096
 0.108

我想从开始的时间间隔开始增加 0.030,因此以后每 0.03 的时间间隔或时间窗口用于分组。

【问题讨论】:

  • 能否请您包括失败的尝试以便排除这些尝试?
  • 我打算使用 Cut 或 findinterval 但我没有任何数量的块,我只有这个 0.03 窗口长度
  • 好的,请问您可以复制粘贴转换后的数据吗?我个人更看重数据人员(其他人可能是,所以它也可能对他们有所帮助)。

标签: r dataframe dplyr data.table time-series


【解决方案1】:

你可以试试findInterval点赞

findInterval(df$Time, seq(min(df$Time), max(df$Time), 0.03))
#[1] 1 1 1 2 2 3 3 3 4 4

我们也可以使用cut

breaks <- seq(min(df$Time), max(df$Time), 0.03)
cut(df$Time, c(breaks, Inf), labels = breaks, include.lowest = TRUE)
#[1] 0    0    0    0.03 0.03 0.03 0.06 0.06 0.09 0.09

数据

df <- structure(list(Time = c(0, 0.012, 0.024, 0.036, 0.048, 0.06, 
0.072, 0.084, 0.096, 0.108)), class = "data.frame", row.names = c(NA, -10L))

【讨论】:

  • 我们如何修改时间间隔,使每个组都用它的开始时间而不是1或2来表示,数据太大以至于无法手动设置。
  • @chessosapiens 你能显示你期望的输出吗?
  • lowest &lt;- formatC(min(df$Time), digits = 4, format = "f") highest &lt;- formatC(max(df$Time) + 1, digits = 4, format = "f") 然后像 df$Time_intervals &lt;-cut(df$Time, breaks = seq(lowest, highest, 0.030), include.lowest = TRUE) 这样的东西应该附加间隔,如果这是你想要的。
  • @RonakShah 任何一个:0 , 0.03 , 0.06 , 0.09 ,, 或每个积分的第一行:0 , 0.036 , 0.072 , 0.096
  • @chessosapiens 在这种情况下我们可以使用cut。查看更新的答案。
猜你喜欢
  • 2020-02-18
  • 1970-01-01
  • 1970-01-01
  • 2017-05-03
  • 1970-01-01
  • 1970-01-01
  • 2020-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多