Новый столбец в R, который является кумулятивным подсчетом (суммированием) уникальных дат - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть вопрос относительно создания новой конкретной переменной в большом наборе данных (36000 строк).Я хочу создать переменную, которая будет подсчитывать дни.Так, например:

Date (dd/mm/yyyy)
01-01-2018
01-01-2018
02-01-2018
02-01-2018
02-01-2018
02-01-2018
03-01-2018
03-01-2018

Я хочу создать следующую числовую переменную, которая будет подсчитывать уникальные дни по порядку, так:

New Variable
1
1
2
2
2
2
3
3

Итак, первая уникальная дата получает 1,вторая уникальная дата a 2 и т. д. Всего у меня более 36000 наблюдений, где есть 1096 уникальных дат (три года).Итак, я хочу переменную, которая имеет 1 для первой даты, два для второй даты и 1096 для последней даты.Однако даты не отображаются одинаково: одна уникальная дата появляется, может быть, 30 раз, другая уникальная дата - 50 раз.

Как я могу создать такую ​​переменную в R?

1 Ответ

0 голосов
/ 04 декабря 2018

Два метода:

  • , если вы уверены, что они заказаны правильно, то вы можете использовать:

    cumsum(c(TRUE, diff(x$Date) != 0))
    # [1] 1 2 2 3 4 4 5 5
    
  • , если выне уверены или просто хотите защититься от этого, вы можете позаимствовать из того, как хранятся factor s:

    # randomize the data for this example
    set.seed(2)
    x <- x[sample(seq_len(nrow(x))),,drop=FALSE]
    x
    #         Date
    # 2 2018-01-01
    # 5 2018-01-02
    # 4 2018-01-02
    # 1 2018-01-01
    # 6 2018-01-02
    # 3 2018-01-02
    # 7 2018-01-03
    # 8 2018-01-03
    
    # this is the real work, works even if ordered
    x$NewVar <- as.integer(factor(x$Date))
    x
    #         Date NewVar
    # 2 2018-01-01      1
    # 5 2018-01-02      2
    # 4 2018-01-02      2
    # 1 2018-01-01      1
    # 6 2018-01-02      2
    # 3 2018-01-02      2
    # 7 2018-01-03      3
    # 8 2018-01-03      3
    
    # reorder for presentation here:
    x[order(x$NewVar),]
    #         Date NewVar
    # 2 2018-01-01      1
    # 1 2018-01-01      1
    # 5 2018-01-02      2
    # 4 2018-01-02      2
    # 6 2018-01-02      2
    # 3 2018-01-02      2
    # 7 2018-01-03      3
    # 8 2018-01-03      3
    

Данные:

x <- read.table(stringsAsFactors=FALSE, header=TRUE, text="
Date
01-01-2018
01-01-2018
02-01-2018
02-01-2018
02-01-2018
02-01-2018
03-01-2018
03-01-2018")
x$Date <- as.Date(x$Date, format = "%d-%m-%Y")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...