חישוב ממוצעים חודשיים

23 views
Skip to first unread message

Itzik

unread,
Jul 20, 2015, 4:49:56 AM7/20/15
to israel-r-...@googlegroups.com
שלום,
יש לי ווקטור ארוך של נתוני טמפרטורה. לווקטור זה הצמדתי עמודה של תאריך על-ידי שימוש ב  as.Date
date=seq(as.Date("1984-01-01"), by = "day", length = l)
 
הקובץ שמתקבל הוא למעשה סדרה רצה של טמפרטורה יומית החל מ 1/1/1984.
 
השאלה שלי, כיצד ניתן לייצר סדרת זמן של ממוצעים חודשיים? התוצר הסופי צריך להראות כך:
1984  1  T
1984  2  T
1984  3  T
1984  4  T
1984  5  T
1984  6  T
1984  7  T
1984  8  T
1984  9  T
1984  10  T
1984  11  T
1984  12  T
1985  1  T
1985  2  T
.
.
.
2014  12  T
 
T=מיצוע כל חודש בנפרד עבור כל שנה
 
תודה רבה,
איציק

Liad Shekel

unread,
Jul 20, 2015, 5:01:05 AM7/20/15
to Israel R User Group
library(dplyr)
library(magrittr)

# create data 
l <- 1500
your_data <- data.frame(date = seq(as.Date("1984-01-01"), by = "day", length = l), value = rnorm(l))

# add variables for month and year
your_data %<>% mutate(month = format(date,"%m"), year = format(date,"%Y"))
# or 
# your_data <- data.frame(your_data,month = format(your_data$date,"%m"), year = format(your_data$date,"%Y")) 

your_data %>% group_by(year,month) %>% summarize(T = mean(value))


--
You received this message because you are subscribed to the Google Groups "Israel R User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email to israel-r-user-g...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.



--
:-)

amit gal

unread,
Jul 20, 2015, 5:05:12 AM7/20/15
to israel-r-...@googlegroups.com
א. שימוש בtapply ובפוקנקציה yearmon של zoo
ב. שימוש ב apply.monthly של xts


2015-07-20 11:49 GMT+03:00 Itzik <tzok...@gmail.com>:

--

amit gal

unread,
Jul 20, 2015, 5:07:06 AM7/20/15
to israel-r-...@googlegroups.com
דוגמא:

time = seq(as.date("1990-01-01"),by="day",length=1500)
value = runif(1500)

library(zoo)
option1 = tapply(value,yearmon(time),mean)
library(xts)
option2 = apply.monthly(xts(value,order.by=time),mean)

amit gal

unread,
Jul 20, 2015, 5:10:59 AM7/20/15
to israel-r-...@googlegroups.com
פתרון מוצלח.
אגב, כדי לחלץ את החודש והשנה מתוך תאריך, אפשר להשתמש בפונקציות month() ו year() של חבילת lubridate  המצויינת.

Itzik

unread,
Jul 20, 2015, 7:24:17 AM7/20/15
to israel-r-...@googlegroups.com

הי,

 

תודה רבה. יש לי מספר בעיות:

1. כיצד מציבים את הווקטור הרצוי עבור הערך value? זו הטבלה אשר קבלתי:

 

date

value

month

year

1

1984-01-01

9.20002441406251

01

1984

2

1984-01-02

6.59998779296876

01

1984

3

1984-01-03

9.09998779296876

01

1984

4

1984-01-04

8.30000000000001

01

1984

           

כתבתי:

your_data <- data.frame(date = seq(as.Date("1984-01-01"), by = "day", length = 11504), value = (tt00))

כאשר tt00 הוא ווקטור המכיל את הערכים הנמצאים ב- value. נראה לי שאני פשוט לא קורא נכון לווקטור אותו אני רוצה למצע.

התוצא שהתקבלה לא היתה הממוצע החודשי אבל כן הפורמט הרצוי:

Source: local data frame [378 x 3]

Groups: year

 

   year month        T

1  1984    01 118.0645

2  1984    02 141.6552

3  1984    03 176.1935

4  1984    04 203.2000

5  1984    05 324.0645

6  1984    06 345.4333

7  1984    07 380.0968

8  1984    08 359.9355

9  1984    09 368.5000

10 1984    10 329.2581

 

 

2. כיצד מייצאים את האינפורמציה שנמצאת ב your_data, לאחר העיבוד, לקובץ csv.

 

 

תודה רבה,

איציק

בתאריך יום שני, 20 ביולי 2015 בשעה 12:01:05 UTC+3, מאת Liad:

Liad Shekel

unread,
Jul 20, 2015, 7:32:02 AM7/20/15
to Israel R User Group
לא הבנתי את הסוגיה שאתה מעלה בסעיף 1. תוכל להסביר שוב?
לגבי סעיף 2, תשתמש בפונקציה write.csv

Itzik

unread,
Jul 20, 2015, 8:23:17 AM7/20/15
to israel-r-...@googlegroups.com
הי ליעד,

תודה על התיחסותך המהירה.

אתה רשמת את השורה הבאה:
your_data <- data.frame(date = seq(as.Date("1984-01-01"), by = "day", length = l), value = rnorm(l))

השאלה שלי (אולי היא קצת טריוויאלית ולכן אינה ברורה :-)) מהו הסינטקס הנכון? מה צריך לבוא במקום rnorm(l)? כיצד למצע את הנתונים אשר נמצאים בטבלה תחת השם value?

שוב תודה,
איציק

בתאריך יום שני, 20 ביולי 2015 בשעה 14:32:02 UTC+3, מאת Liad:

Liad Shekel

unread,
Jul 20, 2015, 8:26:10 AM7/20/15
to Israel R User Group
בעמודה של value הכנסתי ערכים שאמורים לדמות את הערכים אותם אתה רוצה למצע.
תוודא שיש לך משתנה שמכיל וקטור נומרי, נניח קרא לו x:
​​
your_data <- data.frame(date = seq(as.Date("1984-01-01"), by = "day", length = length(x)), value = x)
זה אמור לעבוד.


Itzik

unread,
Jul 20, 2015, 9:21:39 AM7/20/15
to israel-r-...@googlegroups.com
הי ליעד,

תודה רבה, זה עובד נהדר.

איציק

בתאריך יום שני, 20 ביולי 2015 בשעה 15:26:10 UTC+3, מאת Liad:

Itzik

unread,
Jul 22, 2015, 3:12:02 AM7/22/15
to Israel R User Group
הי ליעד,

יש לי שאלה נוספות.

במידה והוספתי ווקטורים נוספים של ערכים ל your_data, כיצד ניתן למצע גם אותם ללא צורך בשכפול שורות הסקריפט עבור כל ווקטור בנפרד?
your_data %>% group_by(year,month) %>% summarize(T = mean(value)), למעשה אני רוצה שפעולת ה mean תתבצע לא רק על value אלא גם על value1 (וקטור המכיל ערכים נומריים בדומה ל value).

תודה,
איציק 


בתאריך יום שני, 20 ביולי 2015 בשעה 15:26:10 UTC+3, מאת Liad:
בעמודה של value הכנסתי ערכים שאמורים לדמות את הערכים אותם אתה רוצה למצע.
Message has been deleted

Itzik

unread,
Jul 22, 2015, 3:38:21 AM7/22/15
to Israel R User Group
אתה צודק!
זה עובד נהדר.
שוב המון תודה,
איציק 


בתאריך יום רביעי, 22 ביולי 2015 בשעה 10:28:03 UTC+3, מאת Liad:
קודם כל, אני מציע לפתוח קצת דוקומנטציה של dplyr ולראות בעצמך איך לעשות דברים כאלו ואחרים.
יש כמה דקויות לגבי הפונקציות שניתן להפעיל בתוך summarize ועוד רכיבים נוספים שניתן "לדחוף" בין הפייפים (%<%). 
לעניין הספציפי, המבנה של שרשור הפונקציות המדובר הוא כך:

In general:
DATA %>% 
group_by( aggregation variables, separated by commas ) %>% 
summarize( function to apply on variables of DATA )

Syntax:
DATA %>% 
group_by( var1, var2 ,var3 ) %>% 
summarize( new_var_name1 = some_function(variables of DATA ) , new_var_name2 = another_function(variables of DATA  )

In your case:
your_data %>% group_by(year,month) %>% summarize(T = mean(value), T2 = mean(value1) )
Reply all
Reply to author
Forward
0 new messages