Как перебрать повторный набор данных, чтобы получить месячные итоги? - PullRequest
1 голос
/ 14 октября 2019

Как бы я перебрал фрейм данных в R, чтобы получить общее количество для каждой переменной на основе дат (произвольного порядка и количества)?

Date          Var
2019-03-1    A    
2019-01-1    A
2019-03-1    B
2019-02-1    A
2019-01-1    A
2019-01-1    B
2019-02-1    A
2019-02-1    A
2019-02-1    B
2019-01-1    A
2019-03-1    C

Для заполнения другого фрейма, который содержит

Date         Var A          Var B            Var C
2019-01-1    3              1                0
2019-02-1    3              1                0
2019-03-1    1              1                1

Ответы [ 2 ]

1 голос
/ 14 октября 2019

Это простой oneliner в data.table

library(data.table)
dcast( DT, Date ~ Var)

#         Date A B C
# 1: 2019-01-1 3 1 0
# 2: 2019-02-1 3 1 0
# 3: 2019-03-1 1 1 1

пример данных

DT <- data.table::fread("Date          Var
2019-03-1    A    
2019-01-1    A
2019-03-1    B
2019-02-1    A
2019-01-1    A
2019-01-1    B
2019-02-1    A
2019-02-1    A
2019-02-1    B
2019-01-1    A
2019-03-1    C")
0 голосов
/ 14 октября 2019

Мы получаем count из 'Date', 'Var' и изменяем форму с 'long' на 'wide' с помощью pivot_wider

library(dplyr)
library(tidyr) #1.0.0
library(stringr)
df1 %>% 
   count(Date, Var = str_c('Var_', Var)) %>% 
   pivot_wider(names_from = Var, values_from = n, values_fill = list(n = 0))
# A tibble: 3 x 4
#  Date      Var_A Var_B Var_C
#  <chr>     <int> <int> <int>
#1 2019-01-1     3     1     0
#2 2019-02-1     3     1     0
#3 2019-03-1     1     1     1

В base R, это можетбыть сделано с table

table(df1)

data

df1 <- structure(list(Date = c("2019-03-1", "2019-01-1", "2019-03-1", 
"2019-02-1", "2019-01-1", "2019-01-1", "2019-02-1", "2019-02-1", 
"2019-02-1", "2019-01-1", "2019-03-1"), Var = c("A", "A", "B", 
"A", "A", "B", "A", "A", "B", "A", "C")),
class = "data.frame", row.names = c(NA, 
-11L))
...