मेरे पास एक सीएसवी फ़ाइल है जिसमें प्रत्येक भाग के लिए तापमान माप के साथ आउटपुट मानों की लगभग 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
     }
}

मूल रूप से, प्रथम भाग आईडी के लिए मेरा परिणाम होना चाहिए:

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

मैंने केवल कोड दिखाया है जो पहली 3 पंक्तियों के औसत का मूल्यांकन करता है। क्या मैं सही दिशा में जा रहा हूँ? कोई बेहतर तरीका?

0
SalN85 20 जुलाई 2019, 09:55

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")
1
Ronak Shah 20 जुलाई 2019, 10:18