汇总由R

时间:2017-03-24 12:36:16

标签: r data.table

我正在尝试计算条件参数的某些时间速率,并编写了以下内容,成功计算了所需的速率。但是,我确信必须有一种更简洁的方法来使用data.table方法。有什么建议吗?

我尝试使用代码实现的背景。 对于每个运行编号,有10个记录编号。每个记录号指的是一个值bin(每个参数的整个值范围被分成10个相等大小的bin)。值是每个箱中花费的时间计数。我试图在每个运行编号上计算P1的计数(将运行编号称为opHours)。然后,我想通过opHours划分每个bin计数,以显示每个bin中花费的每次运行的比例。

library(data.table)

#### Create dummy parameter values
P1 <- rnorm(2000,400, 50);
Date <- seq(from=as.Date("2010/1/1"), by = "day", length.out = length(P1));
RECORD_NUMBER <- rep(1:10, 200);
RUN_NUMBER <- rep(1:200, each=10, len = 2000);

#### Combine the dummy parameters into a dataframe
data <- data.frame(Date, RECORD_NUMBER, RUN_NUMBER, P1);

#### Calculating operating hours for each run
setDT(data);
running_hours_table <- data[ , .(opHours = sum(P1)), by = .(RUN_NUMBER)];

#### Set the join keys for the data and running_hours tables
setkey(data, RUN_NUMBER);
setkey(running_hours_table, RUN_NUMBER);

#### Combine tables row-wise
data <- data[running_hours_table];

data$P1.countRate <- (data$P1 / data$opHours)

是否可以在数据表中生成opHours列而无需先创建单独的表然后再将它们连接在一起?

1 个答案:

答案 0 :(得分:2)

data2[ , opHours := sum(P1), by = .(RUN_NUMBER)]

您应该阅读一些关于data.table的材料: wiki Getting-started 要么 data.table.cheat.sheet