Я пытаюсь агрегировать данные для ежемесячной суммы каждой переменной в R [дубликат]

$query = "SELECT Name,Mobile,Website,Rating FROM grand_table order by 4";

while( $data = mysql_fetch_array($query))
{
    echo("<tr><td>$data[0]</td><td>$data[1]</td><td>$data[2]</td><td>$data[3]</td></tr>");      
}

Вместо использования запроса WHERE вы можете использовать этот запрос ORDER BY. Это намного лучше, чем это для использования запроса.

Я выполнил этот запрос и не получаю никаких ошибок, таких как параметр или логический.

9
задан David Arenburg 19 October 2015 в 21:47
поделиться

5 ответов

Вот пример с использованием dplyr. Вы просто используете соответствующую строку формата даты за месяц %m или год %Y в инструкции format.

set.seed(123)
df <- data.frame(date = seq.Date(from =as.Date("01/01/1998", "%d/%m/%Y"), 
                                 to=as.Date("01/01/2000", "%d/%m/%Y"), by="day"),
                 value = sample(seq(5), 731, replace = TRUE))

head(df)
        date value
1 1998-01-01     2
2 1998-01-02     4
3 1998-01-03     3
4 1998-01-04     5
5 1998-01-05     5
6 1998-01-06     1

library(dplyr)

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

Source: local data frame [25 x 3]
Groups: month [?]

   month  year total
   (chr) (chr) (int)
1     01  1998   105
2     01  1999    91
3     01  2000     3
4     02  1998    74
5     02  1999    77
6     03  1998    96
7     03  1999    86
8     04  1998    91
9     04  1999    95
10    05  1998    93
..   ...   ...   ...
16
ответ дан cdeterman 3 September 2018 в 15:24
поделиться

Не нужно dplyr. Посмотрите на ?as.POSIXlt

df$date<-as.POSIXlt(df$date)
mon<-df$date$mon
yr<-df$date$year
monyr<-as.factor(paste(mon,yr,sep="/"))
df$date<-monyr

Не нужно использовать ggplot2, но это приятно для такого рода вещей.

c <- ggplot(df, aes(factor(date)))
c + geom_bar()

Если вы хотите увидеть фактические цифры

aggregate(. ~ date,data = df,FUN=length )
df2<-aggregate(. ~ date,data = df,FUN=length )
df2
    date value
1   0/98    31
2   0/99    31
3   1/98    28
4   1/99    28
5  10/98    30
6  10/99    30
7  11/97     1
8  11/98    31
9  11/99    31
10  2/98    31
11  2/99    31
12  3/98    30
13  3/99    30
14  4/98    31
15  4/99    31
16  5/98    30
17  5/99    30
18  6/98    31
19  6/99    31
20  7/98    31
21  7/99    31
22  8/98    30
23  8/99    30
24  9/98    31
25  9/99    31
1
ответ дан CCurtis 3 September 2018 в 15:24
поделиться

Значок floor_date из lubridate делает это красиво.

data %>% 
    group_by(month=floor_date(date, "month")) %>%
    summarize(summary_variable=sum(value))

Спасибо Roman Cheplyaka

https: // ro-che. Информация / статьи / 2017-02-22-group_by_month_r

1
ответ дан Hugh Sawbridge 3 September 2018 в 15:24
поделиться

Возможно, вы просто добавили столбец в свои данные следующим образом:

Year <- format(as.Date(Entered_Date, "%d/%m/%Y"), "%Y")

1
ответ дан J. Win. 3 September 2018 в 15:24
поделиться

Существует очень простой способ использования функции cut ():

    list = as.Date(c("1998-5-2", "1993-4-16", "1998-5-10"))
    cut(list, breaks = "month")

, и вы получите следующее:

    [1] 1998-05-01 1993-04-01 1998-05-01
    62 Levels: 1993-04-01 1993-05-01 1993-06-01 1993-07-01 1993-08-01 ... 1998-05-01
0
ответ дан user7453767 3 September 2018 в 15:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: