2016-06-24 23 views
0

年中に価値の変化がある年次データがあります。私はそれを価値の変化を示す毎月のデータにしたいと思います。ここに私のデータのスニペットがあります。毎年から毎月のデータをrに変換します

year value Start date End date 
1985 35451 7/1/1985   3/20/1986 
1986 45600 3/21/1986 12/23/1986 
1987 46089 1/1/1987   10/31/1989 

私は、行(下記のようなしかし、6月後の休憩なしで何か)の列と年のすべての蛾を持っているしたいと思います:1986年の

Jan Feb Mar Apr May Jun 
1985 0 0 0 0 0 0 
1986 35451 35451 38725 45600 45600 45600 

Jul Aug Sep Oct Nov Dec 
1985 35451 35451 35451 35451 35451 35451 
1986 45600 45600 45600 45600 45600 45726 

ヶ月と12月には、以来、平均値を加重しています値の変化はその月に発生します。

ありがとう、ありがとうございます。

答えて

1

ここで必要なのは、seq.Datextabs(またはあなたのお気に入りの亜種)ですが、それを動作させるためには多くのことが必要です。ここでHadleyverseのパッケージでは、あなたが好きな場合はdata.tableベースで書き換えます:

library(dplyr) 
library(tidyr) 
library(lubridate) 

     # Format dates as dates, then, 
df %>% mutate_each(funs(mdy), ends_with('date')) %>% 
    # evaluating each row separately, 
    rowwise() %>% 
    # create a list column with a month-wise sequence of dates for each. 
    mutate(month = list(seq.Date(Start.date, End.date, by = 'month'))) %>% 
    # Expand list column to long form, 
    unnest() %>% 
    # change year column to year of sequence, not label, and reduce month column to month.abb. 
    mutate(year = year(month), month = month(month, label = TRUE)) %>% 
    # For each year-month combination, 
    group_by(year, month) %>% 
    # take the mean of values, so each has only one row, then 
    summarise(value = mean(value)) %>% 
    # spread the result to wide form. 
    spread(month, value, fill = 0) # or xtabs(value ~ year + month, data = .) 

# Source: local data frame [5 x 13] 
# Groups: year [5] 
# 
# year Jan Feb  Mar Apr May Jun Jul Aug Sep Oct Nov Dec 
# (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) 
# 1 1985  0  0  0.0  0  0  0 35451 35451 35451 35451 35451 35451 
# 2 1986 35451 35451 40525.5 45600 45600 45600 45600 45600 45600 45600 45600 45600 
# 3 1987 46089 46089 46089.0 46089 46089 46089 46089 46089 46089 46089 46089 46089 
# 4 1988 46089 46089 46089.0 46089 46089 46089 46089 46089 46089 46089 46089 46089 
# 5 1989 46089 46089 46089.0 46089 46089 46089 46089 46089 46089 46089  0  0 
関連する問題