R: Попробуйте заполнить столбец значениями по определенному условию - PullRequest
1 голос
/ 16 марта 2020

Мне действительно нужен совет для следующей задачи в R: у меня есть столбец со временем и один с интервалами. Для последующей агрегации я должен установить интервалы времени. Пример: У меня есть таблица:

time   interval

1        NA
2        NA
3        NA
4        NA
5        NA
6        NA

Ожидается:

time   interval
1          5
2          5
3          5
4          5
5          5
6         10  
14        15

Код:

count=0
dt = 5
dt_temp = 5

for (i in df_start$time){

if (i<dt) {
df_start$interval[count] =dt

}else{
dt= dt+dt_temp
df_start$interval[count] =dt
}
count = count+1
}

Результат (или проверка изображения):

time    interval
1           5
2           5
3           5
4           5
4.946      10  (wrong)
5.021      15  (totally wrong)
6.023      20  (totally wrong)

Я действительно схожу с ума, так как сижу почти пол дня, чтобы найти проблему. Заранее спасибо!

Изображение моего решения

Ответы [ 3 ]

1 голос
/ 16 марта 2020

Вот базовое решение R, где используется ceiling:

df$interval <- ceiling(df$time/5)*5

такое, что

> df
  time interval
1    1        5
2    2        5
3    3        5
4    4        5
5    5        5
6    6       10
7   14       15

DATA

df <- structure(list(time = c(1L, 2L, 3L, 4L, 5L, 6L, 14L)), row.names = c(NA, 
-7L), class = "data.frame")

0 голосов
/ 16 марта 2020

Попробуйте этот код:

df_start <- data.frame(time = c(1,2,3,4,5,6,14), interval = 0)

count= 1

dt = 5

dt_temp = 5

for (i in df_start$time){

if (i<=dt) {
df_start$interval[count] =dt

}else{
dt= dt+dt_temp
df_start$interval[count] =dt
}
count = count+1
}
0 голосов
/ 16 марта 2020
df_start$interval = ((df_start$time - 1) %/% 5 + 1) *5
...