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