Как создать новый столбец, используя looping и rbind в r? - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть подобные данные.Я хотел бы сделать 3 столбца (date1, date2, date3), используя looping и rbind.Это потому, что я обязан сделать это только этим методом.(все, что мне сказали, это сделать цикл, создать подмножество данных, отсортировать его, создать новый фрейм данных и затем привязать его, чтобы создать новый столбец.)

    year  month day  id
    2011    1   5   3101
    2011    1   14  3101
    2011    2   3   3101
    2011    2   4   3101
    2012    1   27  3153
    2012    2   20  3153
    2012    2   22  3153
    2012    3   1   3153
    2013    1   31  3103
    2013    2   1   3103
    2013    2   4   3103
    2013    3   4   3103
    2013    3   6   3103

Результат, который я ожидаю:

date1: количество дней с 2011 года, 1 января, начните снова с 1 в новом году.

date2: количество дней с идентификатором, работающим в году, начните снова с 1 в новом году.

date3: количество дней, открытых в течение года, начните снова с 1 в новом году.

(все даты в порядке возрастания)

    year month day  id  date1 date2 date3
    2011    1   5   3101    5   1   1
    2011    1   14  3101    14  2   2
    2011    2   3   3101    34  3   3
    2011    2   4   3101    35  4   4
    2012    1   27  3153    27  1   1
    2012    2   20  3153    51  2   2
    2012    2   22  3153    53  3   3
    2012    3   1   3153    60  4   4
    2013    1   31  3103    31  1   1
    2013    2   1   3103    32  2   2
    2013    2   4   3103    35  3   3
    2013    3   4   3103    94  4   4
    2013    3   6   3103    96  5   5

Пожалуйста помоги!Спасибо.

1 Ответ

1 голос
/ 04 апреля 2019

Вы можете сделать это без использования ненужных для цикла и подмножества, вот ответ ниже

df <- read.table(text =" year  month day  id
    2011    1   5   3101
    2011    1   14  3101
    2011    2   3   3101
    2011    2   4   3101
    2012    1   27  3153
    2012    2   20  3153
    2012    2   22  3153
    2012    3   1   3153
    2013    1   31  3103
    2013    2   1   3103
    2013    2   4   3103
    2013    3   4   3103
    2013    3   6   3103",header = T)

library(lubridate)
df$date1 <- yday(mdy(paste0(df$month,"-",df$day,"-",df$year)))
df$date2 <- ave(df$year, df$id, FUN = seq_along)

df$date3 <- ave(df$year, df$year, FUN = seq_along)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...