我是一個新的R用戶,我一直試圖執行嵌套在for循環中的if語句以編寫新變量。我有一個data.frame,其中一些人之前忘記了從E-prime編碼「條件」變量(3個級別的因素:舊,新,誘餌)。該任務有兩個階段編碼/檢索(塊1和2),兩組圖像(A和B)和一個唯一的Word ID。在for循環中使用條件之間的多條if語句
所以我有這樣的:
phase <- rep(c("Block1", "Block2"), each = 7)
condition <- rep(NA, times = 14)
setAorB <- rep(c("A", "B"), times = c(9,5))
WordID <- c(23,34,56,76,45,88,99,23,34,56,76,45,100,105)
loris_data <- data.frame(phase,condition,setAorB,WordID)
這給了我:
> loris_data
phase condition setAorB WordID
1 Block1 NA A 23
2 Block1 NA A 34
3 Block1 NA A 56
4 Block1 NA A 76
5 Block1 NA A 45
6 Block1 NA A 88
7 Block1 NA A 99
8 Block2 NA A 23
9 Block2 NA A 34
10 Block2 NA B 56
11 Block2 NA B 76
12 Block2 NA B 45
13 Block2 NA B 100
14 Block2 NA B 105
我想什麼實現的是:在檢索(塊2),如果setAorB是 「A」,那麼條件老了」。我嘗試了這個基本循環,但顯然,只適用於舊物品,因爲它不會區分誘餌與新物品。
for(i in 1:length(loris_data$condition)) {
if(loris_data$setAorB[i] == "A") {
loris_data$condition[i] <-"old"}
else {
loris_data$condition[i] <- "new"
}
}
然後,我想地說:如果setAorB是「B」和單詞ID是相同的A(這意味着是誘餌),那麼條件是「誘餌」,否則如果setAorB是「B」但它有一個唯一的WordID,條件是「新」。
這將是預期的輸出:
> loris_data
phase condition setAorB WordID
1 Block1 <NA> A 23
2 Block1 <NA> A 34
3 Block1 <NA> A 56
4 Block1 <NA> A 76
5 Block1 <NA> A 45
6 Block1 <NA> A 88
7 Block1 <NA> A 99
8 Block2 old A 23
9 Block2 old A 34
10 Block2 lure B 56
11 Block2 lure B 76
12 Block2 lure B 45
13 Block2 new B 100
14 Block2 new B 105
任何人都可以使用此代碼有所幫助我還在學習,我掙扎了很多?
我想很容易做到你想要的,但請張貼預期的最終產出。 – PoGibas
我剛剛編輯過帖子,包括預期的最終輸出 – Lollo
也許你需要'library(data.table); setDT(loris_data)[phase ==「Block2」,condition:= c('new','old','lure')[as.integer(factor(1 + 2 *(setAorB ==「A」)+ 4 *(setAorB ==「B」&WordID%in%loris_data $ WordID [loris_data $ setAorB ==「A」]))]]]'將列條件轉換爲字符或使用'condition < - rep(NA_character_,times = 14)' – akrun