如何在一定范围内创建嵌套的for循环

时间:2019-08-16 01:52:07

标签: r for-loop nested

我希望将一系列数字添加到我的数据框中。

我不太擅长循环,因此请看看是否有帮助:

k=1
for (i in 1:nrow(Data)){
  for (l in 1: Data[i,2]){
    for (j in 1: Data[i,5]){
      Data[k,]<-Data[i,]
      Data[k,3]<-Data[i,3]+j-1
      k=k+1}
  }
}

这是一个示例数据框:

Data<- data.frame(matrix(NCOs = 4, nrow = 2))
x <- c("gid","did", "pid","plays")
colnames(Data) <- x
Data[1,]<-c(1,1,2,8)
Data[2,]<-c(1,2,12,6)

输出应该总共有14行,看起来像这样

1 1 2 8
1 1 3 8
1 1 4 8
.
.
.
.
1 2 12 6
1 2 13 6
.
.
1 2 17 6

1 个答案:

答案 0 :(得分:3)

在这里tidyr::complete也许是个不错的选择。

library(dplyr)
library(tidyr)

Data %>%
  group_by(gid, did) %>%
  complete(pid = seq(pid, pid + plays - 1)) %>%
  fill(plays)

#     gid   did   pid plays
#   <dbl> <dbl> <dbl> <dbl>
# 1     1     1     2     8
# 2     1     1     3     8
# 3     1     1     4     8
# 4     1     1     5     8
# 5     1     1     6     8
# 6     1     1     7     8
# 7     1     1     8     8
# 8     1     1     9     8
# 9     1     2    12     6
#10     1     2    13     6
#11     1     2    14     6
#12     1     2    15     6
#13     1     2    16     6
#14     1     2    17     6