我是初学者,所以在解释我的问题时,我可能不会使用正确的术语。希望你能帮助我。
我有一张桌子,包括EP.Detect(入口中的移动),LP.Detect(室内移动),R.Detect(门可以是#34;打开"或者"关闭& #34;或"移动")并且存在为0(假)或1(真)。
这样做的目的是知道一个人何时在场。我通过制定一些条件来做到这一点。我的代码工作正常,除非它来到"关闭"。
我的问题是,它并不了解当R.Detect关闭且EP.Detect和LP.Detect是TimeOut时,它并不意味着Presence为0.因为门庇护所&#39被打开或移动,因此该人仍在场。
occupied=FALSE
j<-1
i<-1
startRow=1
endRow=1
n=1
for (n in 1:length(dft1$Time)){
endRow=n
if(dft1$R.Detect[n]=="moved" |dft1$R.Detect[n]=="open" | dft1$R.Detect[n]=="closed"){
if(n>1){
for(i in startRow:endRow){
if(dft1$R.Detect[n]=="moved" | dft1$R.Detect[n]=="open" ){occupied=TRUE}
if(dft1$EP.Detect[i]=="Movement" & dft1$LP.Detect[i]=="Movement"){occupied=TRUE}
if(dft1$EP.Detect[i]=="TimeOut" & dft1$LP.Detect[i]=="Movement"){occupied=TRUE}
if(dft1$EP.Detect[i]=="Movement" & dft1$LP.Detect[i]=="TimeOut"){occupied=TRUE}
}
}
for(j in startRow:endRow){dft1$Presence[j]<-occupied}
}
startRow=endRow
n=n+1
occupied=FALSE
}
Tried to upload it as a .txt
It is easier to understand when you look in the picture
structure(list(EP.Detect = c("TimeOut", "TimeOut", "TimeOut",
"Movement", "Movement", "Movement", "TimeOut", "TimeOut", "Movement",
"Movement", "TimeOut", "TimeOut", "TimeOut", "TimeOut", "Movement",
"Movement", "Movement", "Movement", "TimeOut", "TimeOut", "TimeOut",
"TimeOut", "TimeOut", "TimeOut", "Movement", "Movement", "Movement",
"TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut",
"TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut",
"TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut",
"TimeOut", "TimeOut", "TimeOut", "TimeOut", "Movement", "Movement",
"TimeOut", "TimeOut", "TimeOut", "Movement", "TimeOut", "TimeOut",
"TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut",
"TimeOut", "TimeOut", "TimeOut", "TimeOut", "Movement", "Movement",
"Movement", "TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut",
"TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut",
"TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut",
"TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut",
"TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut",
"TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut",
"TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut",
"TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut",
"TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut",
"TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut",
"TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut",
"TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut",
"TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut",
"TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut", "Movement",
"Movement", "TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut",
"TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut",
"TimeOut", "TimeOut", "TimeOut", "Movement", "Movement", "Movement",
"Movement", "Movement", "TimeOut", "Movement", "TimeOut", "TimeOut",
"TimeOut"), LP.Detect = c("TimeOut", "TimeOut", "TimeOut", "TimeOut",
"TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut",
"TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut", "Movement",
"Movement", "TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut",
"TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut",
"TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut",
"TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut",
"TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut",
"TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut",
"TimeOut", "TimeOut", "Movement", "TimeOut", "TimeOut", "TimeOut",
"TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut",
"TimeOut", "TimeOut", "TimeOut", "Movement", "Movement", "Movement",
"Movement", "Movement", "TimeOut", "TimeOut", "TimeOut", "TimeOut",
"TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut",
"TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut",
"TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut",
"TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut",
"TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut",
"TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut",
"TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut",
"TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut",
"TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut",
"TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut",
"TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut",
"TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut",
"TimeOut", "Movement", "Movement", "Movement", "Movement", "TimeOut",
"TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut",
"TimeOut", "TimeOut", "TimeOut", "TimeOut", "TimeOut", "Movement",
"Movement", "Movement", "Movement", "TimeOut", "Movement", "Movement",
"Movement", "Movement", "Movement", "TimeOut", "TimeOut", "TimeOut"
), R.Detect = c("closed", "closed", "open", "moved", "moved",
"closed", "closed", "closed", "moved", "moved", "closed", "closed",
"closed", "closed", "closed", "closed", "moved", "moved", "closed",
"closed", "closed", "closed", "closed", "closed", "closed", "moved",
"moved", "closed", "closed", "closed", "closed", "closed", "closed",
"closed", "closed", "closed", "closed", "closed", "closed", "closed",
"closed", "closed", "closed", "closed", "closed", "closed", "closed",
"closed", "closed", "moved", "moved", "closed", "closed", "closed",
"closed", "closed", "closed", "closed", "closed", "closed", "closed",
"closed", "closed", "closed", "closed", "closed", "closed", "closed",
"moved", "moved", "closed", "closed", "closed", "closed", "closed",
"closed", "closed", "closed", "closed", "closed", "closed", "closed",
"closed", "closed", "closed", "closed", "closed", "closed", "closed",
"closed", "closed", "closed", "closed", "closed", "closed", "closed",
"closed", "closed", "closed", "closed", "closed", "closed", "closed",
"closed", "closed", "closed", "closed", "closed", "closed", "closed",
"closed", "closed", "closed", "closed", "closed", "closed", "closed",
"closed", "closed", "closed", "closed", "closed", "closed", "closed",
"closed", "closed", "closed", "closed", "closed", "closed", "closed",
"closed", "closed", "closed", "closed", "closed", "closed", "closed",
"closed", "closed", "closed", "closed", "closed", "closed", "closed",
"closed", "closed", "closed", "closed", "closed", "closed", "closed",
"closed", "moved", "closed", "closed", "closed", "closed", "closed",
"closed", "closed", "closed", "closed", "closed", "closed", "closed",
"closed", "closed", "closed", "open", "closed", "closed", "closed",
"closed", "moved", "closed", "closed", "closed"), Presence = c(0,
0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0,
0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 0, 0, 0)), .Names = c("EP.Detect", "LP.Detect",
"R.Detect", "Presence"), row.names = 25550:25727, class = "data.frame")
答案 0 :(得分:1)
您可以使用dplyr case语句更清晰地完成此操作,而无需使用任何for循环。
# Loop through all rows in the dataframe starting at row 2
for(i in 2:nrow(dft1)){
# If R.Detect is either "moved", "open", or "closed"
# AND ( (EP.Detect on the previous row is "Movement" AND LP.Detect on the previous row is either "Movement" or "Timeout")
# OR (EP.Detect on the previous row is "TimeOut" AND LP.Detect on the previous row is "Movement")
# )
# Then set Presence to 1
# Else set Presence to 0
if(dft1$R.Detect[i] %in% c("moved","open","closed")
& ( (dft1$EP.Detect[i - 1] == "Movement" & dft1$LP.Detect[i - 1] %in% c("Movement","TimeOut") )
| (dft1$EP.Detect[i - 1] == "TimeOut" & dft1$LP.Detect[i - 1] == "Movement")
)
){
dft1$Presence[i] <- 1
} else{
dft1$Presence[i] <- 0
}
}
如果你因为特殊原因需要通过for循环来处理它,那么这个简化的循环应该可以满足你的需要
{{1}}