R 使用if-else语句创建一个灵活的公式,可以根据呈现的刺激进行调整

R 使用if-else语句创建一个灵活的公式,可以根据呈现的刺激进行调整,r,eye-tracking,R,Eye Tracking,我希望一切都好。我最近开发了一个代码(在Wonder stack overflow社区的帮助下)来计算第一次注视的时间、第一次注视的持续时间以及对感兴趣区域的总访问持续时间。我现在想更新它,以便它可以根据呈现的刺激进行调整。具体来说,x和y坐标在每个刺激之间的变化非常微小。我有一个刺激坐标的电子表格示例。如果我能读懂这些,那就太好了。将其与最终_标签数据中的刺激相匹配,并能够在所有试验中计算和总结这些指标。所以我需要代码中的一些东西,本质上说-如果是这个刺激(例如,A1使用这些坐标等) 谢谢你的

我希望一切都好。我最近开发了一个代码(在Wonder stack overflow社区的帮助下)来计算第一次注视的时间、第一次注视的持续时间以及对感兴趣区域的总访问持续时间。我现在想更新它,以便它可以根据呈现的刺激进行调整。具体来说,x和y坐标在每个刺激之间的变化非常微小。我有一个刺激坐标的电子表格示例。如果我能读懂这些,那就太好了。将其与最终_标签数据中的刺激相匹配,并能够在所有试验中计算和总结这些指标。所以我需要代码中的一些东西,本质上说-如果是这个刺激(例如,A1使用这些坐标等)

谢谢你的帮助,如果我现在能提供更多的信息,请告诉我

保重身体,

卡罗琳

Face_AOI <- Final_Labels %>%
    mutate(AOI_face = (mean_x >= .100 & mean_x <= .500 & mean_y >= .100 & mean_y <= .800), #These numbers are FAKE ###) %>%
    filter(AOI_face) %>%
    group_by(SubjectID, Trial) %>%
    summarize(Face_totalfixationduration = sum(Duration), Face_firstfixationduration = first(Duration), Face_timetofirstfixation = first(Start))
  
  
  Mouth_AOI <- Final_Labels %>%
    mutate(AOI_mouth = (mean_x >= .200 & mean_x <= .300 & mean_y >= .500 & mean_y <= .600)) %>%
    filter(AOI_mouth) %>%
    group_by(SubjectID, Trial) %>%
    summarize(Mouth_totalfixationduration = sum(Duration), Mouth_firstfixationduration = first(Duration), Mouth_timetofirstfixation = first(Start))
  
  Mouth_AOI$SubjectID <- NULL
  
  Eyes_AOI <- Final_Labels %>%
    mutate(
           AOI_eyes = (mean_x >= .200 & mean_x <= .300 & mean_y >= .500 & mean_y <= .600)) %>%
    filter(AOI_eyes) %>%
    group_by(SubjectID, Trial) %>%
    summarize(Eyes_totalfixationduration = sum(Duration), Eyes_firstfixationduration = first(Duration), Eyes_timetofirstfixation = first(Start))
  

Face_AOI%
变异(AOI_面=(平均值>0.100&平均值=.100&平均值y%)
过滤器(AOI_面)%>%
分组依据(受试者,试验)%>%
总结(Face_totalfixationduration=总和(持续时间),Face_firstfixationduration=第一个(持续时间),Face_TimeToFirstFixationDuration=第一个(开始))
嘴面积%
变异(AOI\U嘴=(平均值>0.200,平均值=0.500,平均值y%)
过滤器(AOI_口)%>%
分组依据(受试者,试验)%>%
总结(嘴\总注视持续时间=总和(持续时间),嘴\第一注视持续时间=第一(持续时间),嘴\时间到第一注视=第一(开始))
嘴面积$subject=0.200,平均x=0.500,平均y%
过滤器(AOI_眼睛)%>%
分组依据(受试者,试验)%>%
总结(眼睛\总注视持续时间=总和(持续时间),眼睛\第一注视持续时间=第一(持续时间),眼睛\时间到第一注视=第一(开始))
具有不同坐标的刺激列表示例,以集成到上述代码中


Df2 <- data.frame(Stimuli = c("A1", "A1", "A1", "A2", "A2", "A2"),
AOI = C("Face", "Eyes", "Mouth", "Face", "Eyes", "Mouth"),
X1 = c(0, 300, 301, 0, 305, 306),
X2 = c(1022, 600, 600, 0, 604, 604),
Y1 = c(0, 30, 31, 0, 30, 38),
Y2 = c(0, 300, 301, 6, 305, 306))


Df2下面是删除“.jpg”并基于刺激值进行连接的代码

library(dplyr)
library(stringr)
Final_Labels %>%
  mutate(Stimuli = str_remove(Stimuli, fixed(".jpg"))) %>%
  full_join(Df2)
#    Stimuli Duration Start End mean_x mean_y   AOI  X1   X2 Y1  Y2
# 1       A1      300   100 160    0.3    0.5  Face   0 1022  0   0
# 2       A1      300   100 160    0.3    0.5  Eyes 300  600 30 300
# 3       A1      300   100 160    0.3    0.5 Mouth 301  600 31 301
# 4       A2       NA    NA  NA     NA     NA  Face   0    0  0   6
# 5       A2       NA    NA  NA     NA     NA  Eyes 305  604 30 305
# 6       A2       NA    NA  NA     NA     NA Mouth 306  604 38 306
# 7       A3      300     1 301    0.5    0.4  <NA>  NA   NA NA  NA
# 8       A4       60   100 160    0.4    0.5  <NA>  NA   NA NA  NA
# 9       A5       NA    NA  NA     NA     NA  <NA>  NA   NA NA  NA
# 10      H1       NA    NA  NA     NA     NA  <NA>  NA   NA NA  NA
库(dplyr)
图书馆(stringr)
最终标签%>%
突变(刺激=str_移除(刺激,固定(“.jpg”))%>%
全连接(Df2)
#刺激持续时间开始结束平均值×平均值×AOI X1 X2 Y1 Y2
#1 A1 300 100 160 0.3 0.5面0 1022 0 0
#2 A1 300 100 160 0.3 0.5眼睛300 600 30 300
#3 A1 300 100 160 0.3 0.5嘴301 600 31 301
#4 A2 NA NA NA NA NA面0 0 6
#5 A2 NA NA NA NA NA眼睛305 604 30 305
#6 A2 NA NA NA NA NA嘴306 604 38 306
#7 A3 300 1 301 0.5 0.4不适用不适用不适用
#8 A4 60 100 160 0.4 0.5不适用不适用不适用
#9 A5 NA NA NA NA NA NA NA NA
#10 H1钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠

我使用了
full\u join
,它将保留两个数据帧中的所有行。如果需要不同的行为,可以使用
internal
left
、或
right
连接。(internal将只保留匹配的行,left和right将分别保留第一个或第二个数据帧中的所有行)谢谢你指出这一点。我已经编辑了这篇文章,现在应该可以修复了。好的-我回来看这篇文章,我对你的目标有点困惑。我没有一个关于
Final\u Label
的例子,所以我真的不明白你是从哪里开始的。匹配你的
Df2
to
Final\u Label
可能意味着某种类型的“连接”-您可以查看常见问题解答。如果您提供了
Final\u Label
的示例,以及您希望它们如何组合的更精确描述,我可以尝试一下。(与您的示例输入相关的所需输出将非常有用)最后一个注意事项-您提供的
X1、X2、Y1、Y2
都是
字符
类,而不是数字(因为它们周围有引号)。这是故意的吗?如果你想将它们用作数字,第一步可能是将它们全部转换为数字。您好,Gregor,感谢您的持续帮助。非常感谢。我现在添加了一个最终标签数据框的示例。关于您的问题X1、X2、Y1、Y2都已经是数字了-我已删除了quo我们希望能更好地反映这一点。
library(dplyr)
library(stringr)
Final_Labels %>%
  mutate(Stimuli = str_remove(Stimuli, fixed(".jpg"))) %>%
  full_join(Df2)
#    Stimuli Duration Start End mean_x mean_y   AOI  X1   X2 Y1  Y2
# 1       A1      300   100 160    0.3    0.5  Face   0 1022  0   0
# 2       A1      300   100 160    0.3    0.5  Eyes 300  600 30 300
# 3       A1      300   100 160    0.3    0.5 Mouth 301  600 31 301
# 4       A2       NA    NA  NA     NA     NA  Face   0    0  0   6
# 5       A2       NA    NA  NA     NA     NA  Eyes 305  604 30 305
# 6       A2       NA    NA  NA     NA     NA Mouth 306  604 38 306
# 7       A3      300     1 301    0.5    0.4  <NA>  NA   NA NA  NA
# 8       A4       60   100 160    0.4    0.5  <NA>  NA   NA NA  NA
# 9       A5       NA    NA  NA     NA     NA  <NA>  NA   NA NA  NA
# 10      H1       NA    NA  NA     NA     NA  <NA>  NA   NA NA  NA