だから私は自分のif-conditionの何が悪いのかを理解しようとしてきましたが、どこにも行き着きません。私はまだRに慣れていないので、ここで非常に基本的な概念を理解していないのではないでしょうか。
論理的な「FALSE」で列を追加したデータフレーム(dc)があります。ここで、regexpr()を使用して指定したdcの2つの列(dc$Probeとdc$Resp)の値に基づいて、各FALSEをTRUEに変更します。
これまでのところ、両方のif条件について、dcの列5の値に関係なく、それぞれのFALSEがTRUEに変更されます。if-conditionsを個別に実行すると、条件のOR部分で正常に機能しているように見えます。つまり、コードはdc$Probeの文字列がORで指定された文字列の1つと一致する場合にのみTRUEを生成します。 -部。しかし、AND部分は無視されているようですか?したがって、完全なコードを実行すると、TRUEのみの列が表示されますが、これは私が望むものではありません。
編集:プローブの文字列が特定のパターンで終了し(私が書いた条件の場合は2つのいずれかで指定されているように)、Respの対応する値が最初に指定されたパターンの「100」である場合にのみTRUEを取得する必要があります条件または2番目の条件で指定されたパターンの「200」。したがって、(sg | s | w1 | w3 | s1 | s2)で終わる文字列の場合、TRUEを取得するにはRespを「100」にする必要があり、(\ d \ dg | \ d \ d)で終わる文字列の場合、RespはTRUEを取得するには「200」。他のすべてのケースは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部分を適切に実装するにはどうすればよいですか?AND部分に対して次のコードも試しましたが、何も変更されませんでした。
regexpr("200", dc$Resp[i])==1
正規表現と制御フローに関するRヘルプを読みましたが、何が間違っているのかまだわかりません。論理式について他のWebページを参照しても、役に立ちませんでした。
助けてください!