0

我想创建以下图: x 轴从 1 到 900 代表试验数字。y 轴显示了三个不同的线以及反应时间的移动平均值。每个难度级别(Hard、Medium、Easy)显示一条线。应使用 facet_wrap 为每个参与者显示单独的图。

现在,如果我使用 ggplot 的geom_smooth()功能,这一切都可以正常工作。像这样:

ggplot(cw_trials_f, aes(x=trial_number, y=as.numeric(correct), col=difficulty)) + 
    facet_wrap(~session_id) + 
    geom_smooth() + 
    ggtitle("Stroop Task")

当我尝试使用动物园库的rollmean功能时,就会出现问题。这是我尝试过的:

ggplot(cw_trials_f, aes(x=trial_number, y=rollmean(as.numeric(correct)-1, 50, na.pad=T, align="right"), col=difficulty)) + 
    facet_wrap(~session_id) + 
    geom_line() + 
    ggtitle("Stroop Task")

似乎这并没有先根据难度对数据进行分区,然后再应用 rollmean 函数,而是反过来。因此,仅显示了一条线,但显示了所有三种颜色。如何将 rollmean 分别应用于每个类别的试验(简单、中等、困难)?

以下是一些示例数据:

  session_id test_number trial_number trial_duration  rule concordant switch correct reaction_time difficulty
1   11674020           1            1           1872  word concordant    yes     yes          1357       Easy
2   11674020           1            2           2839  word discordant     no     yes          2324     Medium
3   11674020           1            3           1525 color discordant    yes      no          1025       Hard
4   11674020           1            4           1544 color discordant     no      no          1044     Medium
5   11674020           1            5           1451  word concordant    yes     yes           952       Easy
6   11674020           1            6           1252 color concordant    yes     yes           746       Easy
4

1 回答 1

1

所以,我最终从上面的评论中遵循了@joran 的建议(谢谢),并做了以下事情:

cw_trials_f <- ddply(cw_trials_f, .(session_id, difficulty), .fun = function(X) transform(X, movrt = rollmean(X$reaction_time, 50, na.pad=T, align="right"), movacc = rollmean(as.numeric(X$correct)-1, 50, na.pad=T, align="right")))

这会在 data.frame 中添加两个额外的列,其中包含准确度和反应时间的移动平均值。

然后这可以很好地绘制它们:

ggplot(cw_trials_f, aes(x=trial_number, y=movacc, col=difficulty)) + geom_line() + facet_wrap(~session_id) + ggtitle("Stroop Task")

与我最初想做的相比,这有一个(次要)缺点:尝试移动平均函数的不同长度有点乏味和缓慢。

于 2013-07-29T10:31:55.027 回答