2016-09-04 1 views
-2

Есть несколько dataframes R с теми же двумя колоннами: «ГМД», «Сумма» в следующемдобавление числовых столбцов из разных dataframes с использованием колонки индексации общего даты

a <- data.frame(YMD = as.Date(c("2012-02-01", "2014-03-04", "2015-05-08")), Amount = c(100, 200, 300)) 
b <- data.frame(YMD = as.Date(c("2012-02-01", "2013-11-08", "2016-09-01")), Amount = c(10, 20, 30)) 
c <- data.frame(YMD = as.Date(c("2013-04-10", "2013-11-08", "2016-09-01")), Amount = c(1, 2, 3)) 

> a 
     YMD Amount 
1 2012-02-01 100 
2 2014-03-04 200 
3 2015-05-08 300 

> b 
     YMD Amount 
1 2012-02-01  10 
2 2013-11-08  20 
3 2016-09-01  30 

> c 
     YMD Amount 
1 2013-04-10  1 
2 2013-11-08  2 
3 2016-09-01  3 

пожалуйста, научите меня, как получить следующий результат, когда какая-либо добавка применяется к вышеуказанным 3 кадрам данных

  YMD Amount 
1 2012-02-01 110 
2 2013-11-08  22 
3 2014-03-04 200 
4 2015-05-08 300 
5 2016-09-01  33 

Спасибо!

ответ

1

Мы можем использовать rbindlist из data.table после размещения 'data.frame на' в list, затем группируются по 'YMD', мы получим sum из 'Сумма'

library(data.table) 
rbindlist(list(a,b,c))[, .(Amount = sum(Amount)), by = YMD] 
#   YMD Amount 
#1: 2012-02-01 110 
#2: 2014-03-04 200 
#3: 2015-05-08 300 
#4: 2013-11-08  22 
#5: 2016-09-01  33 
#6: 2013-04-10  1 

Или с dplyr , мы можем сделать то же самое с bind_rows и summarise

library(dplyr) 
bind_rows(a,b,c) %>% 
     group_by(YMD) %>% 
     summarise(Amount = sum(Amount)) 
0

я бы что-то сделать например:

abc <- rbind(a, b, c) 
aggregate(abc$Amount, by = list(abc$YMD), FUN = "sum") 
# Group.1 x 
# 1 2012-02-01 110 
# 2 2013-04-10 1 
# 3 2013-11-08 22 
# 4 2014-03-04 200 
# 5 2015-05-08 300 
# 6 2016-09-01 33 
Смежные вопросы