Формирование нового кадра данных из старого кадра данных с использованием цикла for - PullRequest
0 голосов
/ 21 июня 2019

Мой фрейм данных "c1"

 steps interval
   <dbl>    <int>
 1     0        0
 2     0        5
 3     0       10
 4     0       15
 5     0       20
 6     0       25
 7     0       30
 8     0       35
 9     0       40
10     0       45
# ... with 278 more rows

PS: Sorry for providing only a small sample from data

Я хочу создать новый фрейм данных «c11», добавив строки столбца «interval» для каждого интервала 50, так что сумма каждых 50 шагов (шагов столбца) вычисляется соответственно.

Мой новый фрейм данных должен выглядеть как

 steps interval
   <dbl>    <int>
 1     0        0
 2     0        50
 3     0       100
 4     10      150
 5     0       200
 6     6       250
 7     20      300
 8     0       350
 9     230     400
10     0       450

Мой код

n=0
j=0
y <- nrow(c1)/50
class(n)
c11 <- data.frame(matrix(NA, nrow = y, ncol = 2)) 

class(c11)
for (i in 1:nrow(c1)) {
  n <- n + c1[i,1]
  if (i%%50==0)
  {
    c11[j,1]<- i
    c11[j,2] <- n
    j <- j+1
    n = 0
  }

}

Может кто-нибудь исправить код, поскольку он показывает неправильный вывод?

1 Ответ

1 голос
/ 21 июня 2019

Попробуйте использовать cut в aggregate

with(c1, aggregate(list(steps = steps), 
     list(interval = cut(interval, c(seq(min(interval), max(interval), 50), Inf), 
     labels = seq(min(interval), max(interval), 50), include.lowest = TRUE)), sum))

Чтобы сделать это более явным, мы можем разделить шаги

c1$group <- cut(c1$interval, c(seq(min(c1$interval), max(c1$interval), 50), Inf),
      labels = seq(min(c1$interval), max(c1$interval), 50), include.lowest = TRUE)

aggregate(steps~group, c1, sum)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...