问题描述
我希望一切都好。我最近开发了一个代码(在出色的堆栈溢出社区的帮助下),以计算首次定位所需的时间,首次定位持续时间以及对感兴趣区域的总访问时间。我现在想更新它,以便可以根据所显示的刺激进行调整。具体而言,每个刺激之间的x和y坐标变化很小。我有一个刺激坐标的电子表格示例。如果我能读懂这些内容,那就太好了。将它与Final_Label数据中的“刺激”匹配,并能够在所有试验中计算和总结这些指标。因此,我需要代码中的一些基本内容-如果是这种刺激(例如,A1使用这些坐标等)。
谢谢您的帮助,请告知我目前是否可以提供更多信息。
保重并保持健康,
Caroline
from gekko import GEKKO
import numpy as np
# compare with numpy
xnp = np.logspace(-1,4,100)
ynp = np.log2(xnp)
gk = GEKKO(remote=False)
x = gk.Param(xnp)
y,z = gk.Array(gk.Var,2)
# define a new log2 function
def glog2(x):
return gk.log(x)/np.log(2)
gk.Equation(y==glog2(x))
gk.options.IMODE=2; gk.solve(disp=False)
import matplotlib.pyplot as plt
plt.semilogx(xnp,ynp,'b-',lw=4,label=r'$y=\log_2(x)$ Numpy')
plt.semilogx(x.value,y.value,'r--',lw=2,label=r'$y=\log_2(x)$ Gekko')
plt.legend(); plt.xlabel('x'); plt.ylabel('y'); plt.grid(); plt.show()
具有不同坐标的刺激列表的示例,可以整合到上述代码中。
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))
这是Final_Labels数据框的示例
Df2 <- data.frame(Stimuli = c("A1","A1","A2","A2"),AOI = C("Face","Eyes","Mouth","Face","Mouth"),X1 = c(0,300,301,305,306),X2 = c(1022,600,604,604),Y1 = c(0,30,31,38),Y2 = c(0,6,306))
解决方法
这里的代码用于删除“ .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
我使用了full_join
,它将保留两个数据帧中的所有行。如果您想要不同的行为,则可以使用inner
,left
或right
连接。 (内部将仅保留匹配的行,左侧和右侧将分别保留第一个或第二个数据帧中的所有行,而保留彼此匹配的任何行。