所以我一直在試圖弄清楚我的if條件有什麼問題,但我無處可去。我對R還是個新手,所以也許我在這裏不理解一些非常基本的概念?我的if -condition有什麼問題?
我有一個數據幀(DC),我附加了一個邏輯「FALSE」列。現在我想根據我使用regexpr()指定的dc(dc $ Probe和dc $ Resp)兩列中的值將每個FALSE更改爲TRUE。
到目前爲止它所做的是,對於兩個if條件,它都將每個FALSE更改爲TRUE,而不考慮dc第5列中的值。當我單獨運行if條件時,我可以看到它們似乎在條件的或部分上工作正常,這意味着當dc $ Probe中的字符串匹配OR中指定的字符串之一時,代碼只會生成TRUE -部分。但是,AND部分似乎被忽略了?因此,當我運行完整的代碼時,我得到的列只有TRUE,這不是我想要的。
編輯:只有當Probe中的字符串以特定模式結束(如果兩個條件中的任意一個指定)並且Resp中的相應值爲模式的「100」時,我纔會得到TRUE在我的第一個條件中指定,或者在我的第二個條件中指定的模式爲「200」。因此,對於以(sg | s | w1 | w3 | s1 | s2)結尾的字符串,Resp必須爲「100」以獲得TRUE,對於以(\ d \ dg | \ d \ d)結尾的字符串,Resp必須爲「200」以獲得TRUE。所有其他情況應該是FALSE。例如,如果一個字符串在s1中結束,並且Resp中的對應值爲200,則代碼應該返回FALSE。
編輯:一些示例數據:
>dc<-data.frame(Subject=rep("SN",6), item.c=(1:6), Stim=c("XYZc02s03","XYZc01s30","XYZc02s29", "XYZc01s38", "XYZc02s11", "XYZc06w21"), Probe=c("XYzf02s03","XYZf01s30g","XYZf02s29w1","XYZf01s38sg","XYZf02s11s","XYZv06w21s1"), Resp=c(200, 100, 100, 100, 100, 200))
這是我的代碼:
>dc$Resp<-as.character(dc$Resp) #column 5 in dc
dc$Probe<-as.character(dc$Probe)
dc$correct_response <- FALSE
for (i in 1:nrow(dc)) {
if (regexpr("^.*sg$", dc$Probe[i])==1 || regexpr("^.*s$", dc$Probe[i])==1 || regexpr("^.*w1$", dc$Probe[i])==1 || regexpr("^.*w3$", dc$Probe[i])==1 || regexpr("^.*s1$", dc$Probe[i])==1 || regexpr("^.*s2$", dc$Probe[i])==1 && dc[i,5]=="100") {(dc$correct_response[i]<- TRUE)}
if (regexpr("^.*\\d\\dg$", dc$Probe[i])==1 || regexpr("^.*\\d\\d$", dc$Probe[i])==1 && dc[i,5]=="200") {(dc$correct_response[i]<- TRUE)}
}
是不是有什麼毛病我使用正則表達式?我用glob2rx()檢查了它們,好像它們沒問題...我使用「OR」(||)或/和「AND」(& &)不正確?我如何正確實施AND部分?我也嘗試了與部分下面的代碼,但它並沒有改變什麼:
regexpr("200", dc$Resp[i])==1
我讀了正則表達式和控制流的R-幫助,但我還是不明白我的我做錯了。在邏輯表達式上諮詢其他網頁也沒有幫助我。
請幫忙!
@ttmaccer:瞧,一個小數據幀。我還不知道dput(),但它似乎是一個有用的函數。我現在要檢查出來.. – kat