Вы можете преобразовать ваши данные из длинного в широкоформатный формат, а затем использовать summarise_if
или mutate_if
, чтобы получить желаемый результат
Чтобы изменить имена столбцов результата, см. ответ
library(dplyr)
library(tidyr)
df <- read.table(text = txt, header = TRUE, stringsAsFactors = FALSE)
df_wide <- df %>%
mutate(date = as.Date(date, '%m/%d/%Y')) %>%
mutate(rowid = row_number()) %>%
spread(ID, value) %>%
select(-rowid)
df_wide %>%
group_by(date) %>%
summarise_if(is.numeric, funs(sum(., na.rm = TRUE)))
#> # A tibble: 5 x 4
#> date `1` `2` `3`
#> <date> <int> <int> <int>
#> 1 2007-06-04 30 0 0
#> 2 2007-06-05 18 19 0
#> 3 2007-06-20 0 39 0
#> 4 2007-06-21 0 0 22
#> 5 2007-06-29 12 25 0
df_wide %>%
group_by(date) %>%
mutate_if(is.numeric, funs(sum(., na.rm = TRUE))) %>%
arrange(firms)
#> # A tibble: 10 x 5
#> # Groups: date [5]
#> date firms `1` `2` `3`
#> <date> <chr> <int> <int> <int>
#> 1 2007-06-04 A 30 0 0
#> 2 2007-06-05 A 18 19 0
#> 3 2007-06-20 A 0 39 0
#> 4 2007-06-21 A 0 0 22
#> 5 2007-06-29 A 12 25 0
#> 6 2007-06-04 B 30 0 0
#> 7 2007-06-05 B 18 19 0
#> 8 2007-06-20 B 0 39 0
#> 9 2007-06-21 B 0 0 22
#> 10 2007-06-29 B 12 25 0
Создано в 2018-10-01 для пакета представительство (v0.2.1.9000)