根据长格式数据集中其他两个变量的特定行创建新变量

时间:2019-02-18 03:54:45

标签: r dataframe concatenation

我的情绪反应数据库很长,我需要根据受试者中其他两个变量的特定行创建一个变量。

随后的数据帧包括两个参与者(“人”)的数据,这些参与者呈现2张图片(P1,P2,P3),每个图片具有3个重复(R1,R2,R3),这是“相位”变量。可变的响应包括两件事:每个演示文稿的等级(从-30到30)和每张图片所经历的情感。

person <- c(1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2)
block <- c(4, 4, 4, 5, 5, 5, 8, 8, 4, 4, 4, 5, 5, 5, 8, 8)
phase <- c("P1R1", "P1R2", "P1R3", "P2R1","P2R2","P2R3", "Post1", "Post2","P1R1", 
    "P1R2", "P1R3", "P2R1","P2R2","P2R3", "Post1", "Post2")
response <- c(30, 30, 30, -30, -30, -30, "Happy", "Sad", 28, 27, 25, -23, -24,
    -22, "Excited", "Scared")
df <- data.frame(person, block, phase, emotion, response)

我需要创建一个新的列,该列将基于块编号并给我每张图片的情感。

我希望将新列称为“后调查”,并希望其如下所示:

postsurvey <-c ("Happy", "Happy", "Happy","Sad","Sad", "Sad", NA, NA, 
    "Excited", "Excited", "Excited", "Scared", "Scared", "Scared", NA, NA)
df <- data.frame(person, block, phase, emotion, response, postsurvey)

我使用的代码是:

df<-df  %>% group_by(person, block) %>%
mutate(postsurvey=if(block==4){response[phase=="Post1"]}  
      else if (block==5){response[phase=="Post2"]} 
   else {print("NA")})

我希望每个受检者对于每个模块号都收到相同的响应,但是我得到的是,响应没有按受检者分组,也没有在受检者中按模块号重复,就像有一个情绪矢量,一个人得到的情感不是他的。

*在我的原始数据中,每个主题有4张图片,重复10次,因此“ else if”代码重复了两个以上的条件。

0 个答案:

没有答案