我有一个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
我只显示了评估前三行平均值的代码。我朝正确的方向前进吗?还有更好的方法吗?
答案 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")