2013-10-22 27 views
1

我有一個data.frame(df)其中包含兩列(時間,結果)。我試圖根據時間在數據框內循環,並檢查Result的值以執行某些條件。換句話說,我想從頭開始查看df,直到df $ time值變爲60.對於每次迭代,如果大於100,我需要檢查df $ Result。但是,我通過使用子集來完成此操作,但是,我想知道如何以不同的方式做到這一點。例如嵌套For循環。如何在一個條件內循環數據框?

我已經創建了一個MWE來說明問題;

time<-seq(1,100,0.1) 
Result<-seq(1,991,1) 
df<-data.frame(time,Result) 
# I want to loop inside the df until the df$time=60 
# for each iteration I want to check the df$Result if it's >100. 

這是我嘗試做嵌套:

Df_time<-df$time 
Df_result<-df$Result 
x<-0 

for(i in Df_time){ 

    if(i > 60.0){ 

     for(i in Df_result){ 
      if(i >100){ 
      x<-x+1 
      } 
     } 


    } 

    } 

    cat("Total is ",x,"\n") 

它看起來不正確..我認爲相關的內部for循環,因爲它會在整個範圍內。 .. 有什麼建議麼?

+6

一般來說,我會避免在嵌套循環中使用相同的運行ndex'i'(可能會導致不必要的後果) – adibender

回答

2
sum(df$time > 60 & df$Result > 100) 

會做的伎倆什麼。

+0

謝謝你的工作。 – SimpleNEasy

2

這應該給你的行數的計數,我認爲這是你要加起來爲x

dim(df[time < 60 & Result > 100,])[1] 
+2

這不會與'data.frame';) - 如果它這樣做,將是由於環境變量管理不善 –

+0

@RicardoSaporta,你是對的。近一年來我沒有使用過data.frames,所以我已經一點一點地忘記了它。你說環境變量是正確的,因爲時間和結果是首先創建的,我懷疑這是用來創建過濾器。你爲什麼不把正確的方式作爲答案? – TheComeOnMan

+2

還要注意'dim(·)[1]'相當於'nrow(·)',所以你最好使用後者:D –