我真的不知道我做错了什么。
此代码在R Studio中不起作用(我尝试过多次小改动但无效):
Data3$Rebound3<-0
for (i in 2:length(Data3)){
if((Data3$etype[i] == 'SHOT') && (Data3$etype[i-1] == 'SHOT')){
Data3$Rebound3[i]<-1}}
但这两个代码有效:
Data3$Rebound3<-0
for (i in 2:length(Data3)){
if(Data3$etype[i] == 'SHOT'){
Data3$Rebound3[i]<-1}}
Data3$Rebound3<-0
for (i in 2:length(Data3)){
if(Data3$etype[i-1] == 'SHOT'){
Data3$Rebound3[i]<-1}}
先谢谢你的帮助!
答案 0 :(得分:0)
您可以在没有for
循环
indx <- with(Data3, c(FALSE,etype[-1]=='SHOT' & etype[-nrow(Data3)]=='SHOT'))
Data3$Rebound3 <- indx+0
head(Data3)
# etype Rebound3
#1 SHOT 0
#2 SHOT 1
#3 SOMETHING ELSE 0
#4 SOMETHING 0
#5 SOMETHING 0
#6 SOMETHING ELSE 0
关于您的代码,2:length(Data3)
将提供column
索引而不是row
索引(如果我从您的代码中理解的话)。我想你想要row
索引。也许,
Data3$Rebound3<-0
for(i in 2:nrow(Data3)){
if(Data3$etype[i] == 'SHOT' & Data3$etype[i-1] == 'SHOT'){
Data3$Rebound3[i]<-1
}
}
Data3$Rebound3
#[1] 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
set.seed(24)
Data3 <- data.frame(etype=sample(c('SHOT', 'SOMETHING', 'SOMETHING ELSE'),
20, replace=TRUE))