Как разбить 366-строчные данные на месяцы - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть годовые данные, которые состоят из строк без дат. И это выглядит так:

20110101
5.194
0.007
0.000
0.000
0.000
0.845
2.578
12.428
.
.

Он начинается 01.01.2011 и заканчивается 31.12.2011. Я хочу разбить данные на месяцы. Например; первые 31 день для января, следующие 28 дней для февраля ..

data<-structure(list(V1 = c(20110101, 0, 0, 4.432, 10.147, 0.879, 0.927, 
0.179, 0, 0.055, 0, 0, 0, 0, 0, 0, 5.026, 1.171, 0, 0, 0, 0, 
1.447, 5.229, 11.357, 17.611, 4.238, 0.74, 0.003, 5.122, 2.542, 
0.062, 0.951, 0.022, 0.041, 1.291, 0.045, 0, 0, 0, 0, 0, 0.003, 
0.563, 1.032, 0.307, 0.745, 0.563, 0.192, 1.315, 9.275, 3.677, 
0.69, 5.73, 4.472, 3.522, 6.073, 3.392, 2.752, 1.584, 0.901, 
1.667, 0.347, 0.24, 0, 5.449, 1.476, 3.481, 7.057, 3.512, 0.27, 
0.002, 0.002, 0, 0, 0, 1.075, 7.623, 5.591, 2.041, 4.146, 1.411, 
0.228, 2.395, 0.002, 0, 2.858, 2.383, 2.05, 8.149, 0.172, 1.023, 
20.685, 3.613, 2.093, 0.953, 0.575, 0.206, 2.283, 0.192, 2.091, 
9.525, 0.076, 0.002, 6.346, 0.295, 0.062, 0.443, 4.243, 1.703, 
8.14, 0, 0, 0.009, 0.364, 0.28, 0, 3.608, 1.835, 0.999, 0.201, 
0.165, 4.034, 3.65, 10.997, 3.849, 14.976, 0, 0.814, 0.103, 0.153, 
0, 0.11, 1.957, 0.058, 0.302, 0, 0.01, 20.915, 23.377, 2.465, 
0, 0, 0, 0, 0, 0, 0.426, 3.09, 0, 0, 0.855, 0.051, 0.021, 0, 
0, 0, 0, 0, 0.027, 0.148, 14.358, 8.923, 10.554, 1.15, 0.972, 
0, 0.003, 2.649, 0, 0, 0.105, 0.01, 0, 0, 0.003, 23.216, 16.77, 
0.312, 0.017, 0.137, 0.096, 12.48, 9.62, 0.022, 2.959, 0, 0.003, 
0, 0, 0, 0, 0, 0.002, 1.236, 0, 0, 0.002, 0, 0, 0, 0, 0.048, 
0, 0.003, 0, 0, 0, 0, 0, 0, 1.816, 0, 0, 0, 1.257, 0, 0, 0, 0, 
0, 0, 0, 19.254, 3.124, 0, 0, 0, 0, 0, 0, 0.003, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.24, 0, 0, 0, 0, 0, 0.002, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.662, 5.593, 0.491, 0, 0.343, 
0, 0, 0, 0, 1.497, 0.094, 0, 0.002, 0, 0, 0, 0, 0.124, 20.035, 
11.407, 3.174, 0.065, 3.543, 11.553, 13.081, 10.816, 1.178, 10.427, 
0, 0, 0, 0.11, 1.279, 0.728, 3.203, 1.121, 0.347, 0.216, 1.981, 
2.923, 1.796, 0.115, 1.351, 5.177, 0.072, 0, 0, 0, 0, 0, 0.065, 
1.607, 0.302, 1.296, 5.208, 7.637, 2.348, 6.66, 0.472, 0.326, 
0.026, 0, 0.005, 0.057, 2.556, 1.081, 0.863, 1.603, 0, 0, 0, 
0, 0, 0, 0, 0, 2.014, 22.757, 9.163, 0.615, 0.002, 0.043, 0, 
0.12, 0.064, 0.017, 14.619, 0.628, 17.032, 18.574, 4.592, 4.417, 
0.714, 5.655, 3.545, 0.302, 0.003, 0.01, 0, 0, 0.065, 3.828)), class = "data.frame", row.names = c(NA, 
-366L))

Ответы [ 2 ]

1 голос
/ 06 февраля 2020

Полагаю, ваша первая запись - это не данные, а дата (20110101).

Решение Base-R будет выглядеть следующим образом

data$date <- seq(as.Date("2011/01/01"), as.Date("2011/12/31"), by = 1)
1 голос
/ 06 февраля 2020

Итак, создается новый столбец с датой:

library(lubridate)

data <- data[-1, ] # remove the first row ("20110101")

# and now add a new column containing the correct sequence of days
data$date <- seq(ymd(20110101), ymd(20111231), by = "days")
...