Добавление строки за строкой, которая имеет определенное значение - PullRequest
0 голосов
/ 02 декабря 2018

Имею большие данные и желаю иметь возможность добавить строку после строки с датой 01-31 Пример:

id  place name  date    Measure 
1   24  aa  1989-01-29  0.6
1   24  aa  1989-01-30  0.47
1   24  aa  1989-01-31  0.25
1   24  bb  1989-01-29  0.18
1   24  bb  1989-01-30  0.37
1   24  bb  1989-01-31  0.81
1   25  aa  1989-01-29  0.92
1   25  aa  1989-01-30  0.43
1   25  aa  1989-01-31  0.8
2   24  aa  1989-01-29  0.75
2   24  aa  1989-01-30  0.15
2   24  aa  1989-01-31  0.61

Я ищу такой вывод и время запускаважно (у меня большие данные)

id  place   name    date    Measure 
1   24  aa  1989-01-29  0.6
1   24  aa  1989-01-30  0.47
1   24  aa  1989-01-31  0.25
0   0   0        0      0
1   24  bb  1989-01-29  0.18
1   24  bb  1989-01-30  0.37
1   24  bb  1989-01-31  0.81
0   0   0        0      0
1   25  aa  1989-01-29  0.92
1   25  aa  1989-01-30  0.43
1   25  aa  1989-01-31  0.8
0   0   0        0      0
2   24  aa  1989-01-29  0.75
2   24  aa  1989-01-30  0.15
2   24  aa  1989-01-31  0.61

Любая мысль, пожалуйста

1 Ответ

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

Поскольку ваш фрейм данных имеет несколько нечисловых столбцов («дата» и «имя»), вероятно, имеет смысл создавать новые строки с NA, а не 0.Вот один из способов сделать это:

# the data as provided
df <- read.table(text = 'id  place name  date    Measure 
1   24  aa  1989-01-29  0.6
1   24  aa  1989-01-30  0.47
1   24  aa  1989-01-31  0.25
1   24  bb  1989-01-29  0.18
1   24  bb  1989-01-30  0.37
1   24  bb  1989-01-31  0.81
1   25  aa  1989-01-29  0.92
1   25  aa  1989-01-30  0.43
1   25  aa  1989-01-31  0.8
2   24  aa  1989-01-29  0.75
2   24  aa  1989-01-30  0.15
2   24  aa  1989-01-31  0.61', header = T)

# indices of matching dates, then turned into a rolling sum
key.dates <- cumsum(grepl('01-31$', df$date))

# a blank data frame to store padded data
df.new <- data.frame(id = rep(NA, nrow(df) + max(key.dates)), place = NA, name = as.character(NA), date = as.Date(NA), Measure = NA, stringsAsFactors = F)

# copy the old data frame into the new, using the padded indices
df.new[1:nrow(df) + key.dates, ] <- df

   id place name       date Measure
1   1    24    1 1989-01-29    0.60
2   1    24    1 1989-01-30    0.47
3  NA    NA <NA>       <NA>      NA
4   1    24    1 1989-01-31    0.25
5   1    24    2 1989-01-29    0.18
6   1    24    2 1989-01-30    0.37
7  NA    NA <NA>       <NA>      NA
8   1    24    2 1989-01-31    0.81
9   1    25    1 1989-01-29    0.92
10  1    25    1 1989-01-30    0.43
11 NA    NA <NA>       <NA>      NA
12  1    25    1 1989-01-31    0.80
13  2    24    1 1989-01-29    0.75
14  2    24    1 1989-01-30    0.15
15 NA    NA <NA>       <NA>      NA
16  2    24    1 1989-01-31    0.61
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...