【发布时间】:2020-05-17 08:17:34
【问题描述】:
我需要有关此 for 循环的帮助。它似乎正在工作,我没有收到任何错误,但最后它不会将向量“row.toadd”插入到每次迭代的数据框中。但是,当我在 for 循环循环之后编写 rbind() 函数时,它会绑定在循环中创建的最后一个向量并将其插入数据帧中。但我希望它为 for 循环中的每次迭代都这样做!当我写“row.toadd”时,最后一次迭代有一个向量,就像我想要的那样,所以它是最后一部分不起作用。我认为这真的很奇怪,因为我之前使用过类似的代码并且它有效。
for(i in 1:length(event.files)){
event.temp <- fromJSON(file=event.files[i])
shot.index <- which(unlist(lapply(event.temp,function(x) x$type$name))=="Shot")
shots.France <- shot.index[which(unlist(lapply(shot.index,function(x) event.temp[[x]]$team$name))=="France")]
shots.France.df <- data.frame(matrix(NA,nrow=1,ncol=11))
colnames(shots.France.df) <- c("Possession","Player","X.Shot","Y.Shot",
"Shot.Type","xG","keypassid","X.KeyPass","Y.KeyPass","Shot.Outcome","Shot.Foot")
if(length(shots.France)!=0){
for(p in 1:length(shots.France)){
shots.France.temp <- event.temp[[shots.France[p]]]
possession <- shots.France.temp$possession
shooter <- shots.France.temp$player$name
shots.location <- shots.France.temp$location
shots.type <- shots.France.temp$shot$technique$name
shots.xg <- ifelse("statsbomb_xg" %!in% names(shots.France.temp$shot),NA, shots.France.temp$shot$statsbomb_xg)
keypass <- ifelse("key_pass_id" %!in% names(shots.France.temp$shot),NA,shots.France.temp$shot$key_pass_id)
keypass.location <- if(!is.na(keypass)){
as.vector(unlist(pass.team1.df[which(pass.team1.df$passid==keypass),c("X.Pass","Y.Pass")]))
}else{
c(NA,NA)
}
shots.outcome <- shots.France.temp$shot$outcome$name
body.part <- shots.France.temp$shot$body_part$name
row.toadd <- c(possession,shooter,shots.location,shots.type,shots.xg,keypass,keypass.location[1],keypass.location[2],shots.outcome,body.part)
shots.France[p,] <- row.toadd
shots.France.df <- rbind(shots.France.df,row.toadd)
shots.France.list <- list(shots.France.df)
}
}
}
【问题讨论】:
-
如果您将问题分解为基本要素,您可能会更容易获得帮助。哦,是的,如果你提供了一些代表
标签: r dataframe for-loop vector rbind