2017-09-19 85 views
0

我每天時間序列數據幀,我要轉換爲包月,按以下格式:的R - 每天每月的時間序列 - 重複天

DATE VALOR 
3/5/2014 8.9 
3/5/2014 50 
3/5/2014 50 
3/6/2014 77.4 
3/7/2014 97.95 
3/8/2014 118.5 
3/8/2014 139.05 
3/8/2014 159.6 
3/10/2014 180.15  
3/11/2014 200.7 

可以看出,天都沒有在數據庫中均勻重複。最好的方法是什麼?除此之外,VALOR列應該是一個SUM,而不是一個MEAN。

回答

1

假設所有的時間序列在data.frame應該由sum()彙總那麼可以嘗試:

library(data.table) 
setDT(df) 
df[, lapply(.SD, sum), by = format(DATE, "%Y-%m")] 

一個小例子:

df <- data.frame(DATE = seq(as.Date("2016-01-01"), length.out = 100, by = 1) 
       , x1 = 1:100, x2 = 1:100) 
library(data.table) 
setDT(df) 
df[, lapply(.SD, sum), by = .(Date = format(DATE, "%Y-%m"))] 
     Date x1 x2 
1: 2016-01 496 496 
2: 2016-02 1334 1334 
3: 2016-03 2356 2356 
4: 2016-04 864 864 
+0

感謝。解決了。 –

0

所以,如果我正確地理解它,你想按月分組(並假設年份也一樣)。使用dplyr

df %>% 
mutate(month = format(date, "%m"), year = format(date, "%Y")) %>% 
group_by(month, year) %>% 
summarise(total_sum = sum(value)) 
0

讀它使用動物園創建動物園對象顯示。指數將是一個年份對象,它直接代表年/月。

注意,不像使用字符串來表示年/月這給出了一個年/月,可以被操縱(例如,一個一個月添加到它,與劇情和ggplot使用它,等)

library(zoo) 
z <- read.zoo(df, FUN = as.yearmon, format = "%m/%d/%Y", aggregate = sum) 

給:

> z 
Mar 2014 
1082.25 

如果你需要一個數據幀的結果使用fortify.zoo(z)

注:輸入可複製的形式假設爲:

Lines <- " 
DATE VALOR 
3/5/2014 8.9 
3/5/2014 50 
3/5/2014 50 
3/6/2014 77.4 
3/7/2014 97.95 
3/8/2014 118.5 
3/8/2014 139.05 
3/8/2014 159.6 
3/10/2014 180.15  
3/11/2014 200.7" 
df <- read.table(text = Lines, header = TRUE)