我是一个新的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