每部分平均n行,然后同一部分最后n行

时间:2019-07-20 06:55:17

标签: r dataframe

我有一个csv文件,该文件具有大约10行输出值以及每个部分的温度测量值。大约有100个零件。但我想要以下内容:

每个部分,显示部分,平均值,平均温度的前3行平均 同一部分,显示部分,平均值,平均温度的最后3行的平均值

Row#|PartID|Output|Temp(C)
--------------------
  1 |  435 | 70 | 25
  2 |  435 | 30 | 21
  3 |  435 | 20 | 20
  ..|  ... | ...| ...
  8 |  435 | 50 | 10
  9 |  435 | 35 | 15
 10 |  435 | 45 | 20
 11 |  525 | 60 | 25
 12 |  525 | 15 | 20

and so on

mydata <- csv.read("some file.csv", header=T)
# maximum number of rows to evaluate
nmax <- 3
n <- 1
for i in unique(part, margin=1) 
{
  while (n<nmax)
     {
       apply(mydata, 2, mean)
       n = n+1
     }
}

基本上,我的第一部分ID的结果应该是:

First Output (Average first 3 rows):

PartID|Output|Temp
 435  |  40  | 23

Second Output (Average last 3 rows):

PartID|Output|Temp
 435  |  43.3| 15

我只显示了评估前三行平均值的代码。我朝正确的方向前进吗?还有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

使用dplyr的方法是为每个PartID选择前3行和后3行,每3行创建另外一组,并获取mean列。

library(dplyr)

df %>%
  group_by(PartID) %>%
  slice(c(1:3, (n()-2):n())) %>%
  group_by(group = rep(c(1, 2),each = 3)) %>%
  #Or group_by(group = gl(n()/3, 3)) %>%
  summarise_all(mean) %>%
  select(-Row, -group)

# A tibble: 2 x 3
#  PartID Output Temp.C.
#   <dbl>  <dbl>   <dbl>
#1    435   40        22
#2    435   43.3      15

数据

df <- structure(list(Row = c(1L, 2L, 3L, 4L, 8L, 9L, 10L), PartID = c(435L, 
435L, 435L, 435L, 435L, 435L, 435L), Output = c(70L, 30L, 20L, 
20L, 50L, 35L, 45L), Temp.C. = c(25L, 21L, 20L, 20L, 10L, 15L, 
20L)), row.names = c(NA, 7L), class = "data.frame")