【发布时间】:2016-11-15 19:55:03
【问题描述】:
我目前正在开展一个项目,在该项目中,我正在浏览一个包含某些事件信息的大型数据框。在这些事件中,我对计算球的平均速度很感兴趣。要做到这一点的任何人,我都在使用 for 循环,该循环首先对数据帧进行子集化以获取仅包含来自某个事件的信息的数据帧。之后,它会计算该事件的平均球速并确定哪支球队拥有球权。现在我遇到了一个问题,有时事件不在我的大数据框中,因此基于该事件对其进行子集返回一个空数据框。此时我的 for 循环遇到错误并停止。我希望使用 if 语句来查看事件编号是否高于 0 会有所帮助,但它给了我相同的结果。下面我发布了我在 for 循环中使用的代码。
for(i in 1:484){
df <- subset[which(subset$event.id == event), ]
if(df$event.id >= 0){
df <- df[rev(order(df$game_clock)),]
distance <- travelDist(df$x_loc, df$y_loc)
start.time <- max(df$game_clock)
end.time <- min(df$game_clock)
time <- start.time - end.time
data.frame$speed.event[i] <- distance/time
df$HOMEDESCRIPTION <- as.numeric(df$HOMEDESCRIPTION)
df$VISITORDESCRIPTION <- as.numeric(df$VISITORDESCRIPTION)
df[is.na(df)] <- 0
if(df$HOMEDESCRIPTION[1] == 0){
data.frame$team[i] <- "away"
}else{
data.frame$team[i] <- "home"
}
event <- event + 1
}else{
event <- event + 1
}
}
我正在寻找的是一种跳过有时会出现的空数据框的方法。例如,事件 1 到 30 工作得很好,但是由于某种原因 31 不存在,并且在子集时它返回一个空数据框。
非常感谢您的帮助
【问题讨论】:
-
您可以使用 ifelse 跳过一个空的数据框。
-
这是另一个解决问题的方法:stackoverflow.com/questions/45493545/…
标签: r for-loop dataframe subset