【问题标题】:R: Error in calculating the average of a variable at different time intervals for many factors using for loopR:使用for循环为许多因素计算不同时间间隔的变量平均值时出错
【发布时间】:2018-07-13 07:22:18
【问题描述】:

我有一个数据框,其中变量(var1)以秒为单位表示。我想在不同的时间间隔(10 秒的间隔直到 500 秒)计算每个样本的 var1 的平均值。 数据框如下所示:

sample   time      var1 
S1        1         3.5
S1        2         6.3
S1        3         7.8
S1        4         20.5
S1        …         ...
S1        530       4.5
S2        1         6.7
S2        2         20.3
S2        3         5.4
S2        …         ...
S2        710       70.3
...

我要获取的数据框是这样的

Sample     var1_mean10:20sec    var1_mean20:30sec  ....  var1_mean490:500sec  
S1
S2
..

所以我写了这段代码:

setwd("…")
A <- read_excel("dati.xlsx")
for (cat in unique(A$sample))
{
 A.s <- subset(A, A$sample == cat)
 cuts <- cut (A.s$time, breaks=seq.int(from = 0, to = 500, by = 10))
 d <- by (A.s$var1, cuts, mean)
 Y<-data.frame(d)
 j <- t(Y)
 write.csv(Y, file = paste(cat, "var1", sep = "_"))
}

但是当我运行它时,我收到错误消息:Error in as.data.frame.default(x[[i]], optional = TRUE) : cannot coerce class ""by"" to a data.frame

计划是最终合并所有不同的 csv。

【问题讨论】:

  • 请输入(yourdata[1:10, ])。这很有帮助。

标签: r for-loop time average


【解决方案1】:

如果我正确理解了您的问题,您将尝试以 10 秒的间隔对数据进行平均。我想提出一种替代方法,使用函数aggregate 来计算 10 秒间隔内的平均值。 10 秒间隔将通过一个虚构的“时间”数组创建,该数组用于对 10 秒间隔进行分组,然后进行平均。

    # try to create some data similar to yours
    A <- data.frame(sample = c(rep('A1', 530), rep('A2', 710)), 
              time = c(1 : 530, 1:710), var1 = runif(530+710))
    A$times <- ceiling(A$time / 10)
    Y <- aggregate(var1 ~ sample + times, data = A, FUN = mean)

然后你可以直接导出tmp。 高温

【讨论】:

  • 问题是我有很多样本,不方便为所有样本写这个。
  • 我可能不明白你的问题,但我提供给你的那行会给你一个平均为 10 秒的 bin 中的所有样本。无需循环。无论如何,我看到你自己解决了,所以恭喜。
【解决方案2】:

已解决:

A <- read_excel("data.xlsx")
n <- subset(A, time <= 500)
d<-data.frame(sample= n$sample, time= n$time, ms=n$var1)
storage.data<-data.frame(matrix(nrow = n, ncol = n))
for(cat in unique(d$sample)){
  g <- subset(d, d$sample == cat)
  cuts <- cut (g$time, breaks=seq.int(from = 0, to = 500, by = 10))
  p <- by (g$ms, cuts, mean)
  storage.data[cat] = p}

View(storage.data)
storage.data_t <- t(storage.data)
View(storage.data_t)
write.csv(storage.data_t, file = "filename.csv")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-08
    • 2021-02-02
    • 1970-01-01
    • 2020-05-20
    相关资源
    最近更新 更多