首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用if else语句创建灵活的公式,该公式可以根据所呈现的刺激进行调整

使用if else语句创建灵活的公式,该公式可以根据所呈现的刺激进行调整
EN

Stack Overflow用户
提问于 2020-10-30 01:44:46
回答 1查看 48关注 0票数 0

我希望一切都好。我最近开发了一个代码(在奇妙的堆栈溢出社区的帮助下)来计算第一次锁定的时间,第一次固定的持续时间,以及对感兴趣区域的总访问持续时间。我现在想要更新它,这样它就可以根据所呈现的刺激进行调整。具体地说,x和y坐标在每个刺激之间都有微小的变化。我有一个刺激坐标的示例电子表格。如果我能把它们读进去就太好了。将其与Final_Label数据中的刺激相匹配,并能够计算和总结所有试验中的这些指标。因此,我需要代码中的一些东西来说明-如果是这个刺激(例如,A1使用这些坐标等)。

感谢您的帮助,请让我知道,如果我现在可以提供任何进一步的信息。

保重,好好待着,

卡罗琳

代码语言:javascript
复制
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))

将具有不同坐标的刺激列表集成到上述代码中的示例。

代码语言:javascript
复制
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))

以下是Final_Labels数据帧的示例

代码语言:javascript
复制
Final_Labels <- data.frame(Stimuli = c("A1.jpg", "A2.jpg", "A3.jpg", "A4.jpg", "A5.jpg", "H1.jpg"), ##note we will need .jpg to be removed to match the files
Duration = c(300, NA, 300, 60, NA, NA),
Start = c(100, NA, 1, 100, NA, NA),
End = c(160, NA, 301, 160, NA, NA),
mean_x = c(.3, NA, .50, .40, NA, NA),
mean_y = c(.5, NA, .4, .5, NA, NA))
EN

回答 1

Stack Overflow用户

发布于 2020-11-04 22:47:02

下面是删除".jpg“并根据刺激值进行连接的代码。

代码语言:javascript
复制
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

我使用了full_join,它将保留两个数据帧中的所有行。如果需要不同的行为,可以改用innerleftright joins。(Inner将只保留匹配的行,left和right将分别保留第一个或第二个数据帧中的所有行,以及其他数据帧中匹配的所有行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64596564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档