我希望将一系列数字添加到我的数据框中。
我不太擅长循环,因此请看看是否有帮助:
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
答案 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