【问题标题】:identify time sequence in data and subset by that sequence r通过该序列 r 识别数据和子集中的时间序列
【发布时间】:2014-06-14 00:02:15
【问题描述】:

我正在尝试编写一个代码来标识 R 中重复时间序列的长度(以秒为单位),并将每个序列子集到它自己的数据帧中以进行曲线拟合和分析。每个序列都是传感器电压输出的时间序列,必须单独分析。

我的代码看起来很笨重,但它可以像这里写的那样工作。我试图弄清楚是否有一个包或简单的步骤我错过了更优雅地执行此操作。秒数是十进制秒数,数据可以是数字或整数,这对于本示例无关紧要。这不是实际的传感器输出,而是相同的格式。

set.seed(1)
all_data = data.frame( sec = rep(1.8:4,9), data = sample(1:27), data2 = sample(5:7))

#identify time step length in seconds
lowest = min(all_data$sec)
highest = max(all_data$sec)
#put into data frame
time_step = c(lowest,highest)

#find index of first time period
matches = match(time_step,all_data[,1])
#subset first time period
total_measures = nrow(all_data)/matches[2]
all_data = all_data[matches[1]:nrow(all_data),]
# test_frame = data.frame(c(1,2))
n = matches[2]

#counter for number of measures in file
count = c(1:(nrow(all_data)/n))
count2 = c(0:(nrow(all_data)/n-1))
# subset to break each measure into its own workable file
eq = paste("subd",count," = all_data[((",count2,"*n)+1):(",count,"*n),]",sep = "")
eval(parse(text = eq))

谢谢!

【问题讨论】:

    标签: r loops time-series subset


    【解决方案1】:

    我会使用data.table 为每个子集提供行ID。

    require(data.table)
    dt <- data.table(all_data)
    dt[which.min(sec):nrow(dt), id:=1:.N, by=sec]
    

    那你就可以像以前一样继续分裂了:

    count <- 1:dt[, max(id, na.rm=TRUE)]
    eq = paste("subd", count," = data.frame(dt[id==", count, ",list(sec, data, data2)])", sep = "")
    eval(parse(text = eq))
    

    或者,在 R 中更常见的是,您可以使用 split 拆分为子集。这将返回data.frames 中的list。这非常有用,因为您可以使用lapply 同时评估所有data.frames 上的函数(曲线拟合等)。

    split(data.frame(dt[, list(sec, data, data2)]), dt$id)
    

    【讨论】:

      【解决方案2】:

      我认为更惯用的方法是为每个度量设置一个标签:

      labl <- rep(count, each=n)
      

      然后创建一个包含您的 subd 的列表

      subds <- by(all_data, labl, I)
      

      这会按标签分解 all_data(I 函数是标识 - 如果您想以某种方式处理单个度量,可以将 I 替换为所需的功能)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-28
        • 2016-05-10
        • 2019-06-22
        • 2018-01-23
        • 2016-09-06
        • 2019-05-11
        • 2021-05-20
        • 2019-01-19
        相关资源
        最近更新 更多