【发布时间】:2014-12-03 17:08:14
【问题描述】:
我尝试重新表述我的问题。 我有以下数据框 bb1,我正在使用 dply 中的 dcast 对其进行解码。在此示例中,我想通过“条件”(主题〜条件)计算每个“主题”的“rt”列中有多少观察值,但我只想要具有满足“z.score”的观察值创造条件。在下面的示例中,我使用 abs(z.score) > 1.5,但有时是 1.5,有时是 1,有时是 2。1.5 只是一个示例。同样在下面的示例中,我计算了长度,但我也希望能够计算平均值(例如,“条件”中每个“主题”的“rt”列的平均值仅适用于具有“z.score”的观察值" > 1.5,所以这里的长度只是一个例子)。
require(reshape2)
require(dplyr)
bb1 = data.frame(subject=c(99,99,99,99,99,11,11,11), rt=c(100,150,2,4,10,15,1,2), ac=rep(1,8),
condition=c(1,1,2,4,3,3,4,4), z.score=c(0.2,0.3,0.2,0.3,0.3,0.2,0.2,0.2))
> bb1
# subject rt ac condition z.score
# 1 99 100 1 1 0.2
# 2 99 150 1 1 0.3
# 3 99 2 1 2 0.2
# 4 99 4 1 4 0.3
# 5 99 10 1 3 0.3
# 6 11 15 1 3 0.2
# 7 11 1 1 4 0.2
# 8 11 2 1 4 0.2
bb1 %>%
group_by(subject, condition) %>%
summarise(n = length(rt[abs(z.score) > 1.5])) %>%
dcast(subject ~ condition, value.var = "n")
# subject 1 2 3 4
# 1 11 NA NA 0 0
# 2 99 0 0 0 0
我的问题是,如果我想为每个主题计算 value.var = "n",我应该如何使用 dcast 部分?而不是每个主题的条件?我想跨条件获取每个主题的 value.var。这实际上意味着我想计算每一行的边距。但是我不想获取主题〜条件的value.var,我只想获取边距(即,跨条件获取每个主题的value.var)并将其保存为data.frame。 在上面的 bb1 我想得到这样的东西
# subject rt
# 1 11 0
# 2 99 0
因为两个受试者(即受试者 11 和受试者 99)在任何满足 z.score 限制的条件下都没有观察结果,所以我需要为两者都取 0。
我希望我的问题现在更好
任何帮助将不胜感激。 谢谢, 阿亚拉
【问题讨论】:
-
您可能想要处理您的示例...您所有的
z.scores 都是 0.2 或 0.3,但您要计算它们的条件是> 1.5。您可以使用n = sum(abs(z.score) > 1.5)简化您的summarise。但是鉴于您的 1.5 阈值,您的输出是正确的。 -
您能否添加一个示例来说明您希望输出的样子?可能您想添加行边距(将
margins = "condition"添加到dcast)或者您可能想要dcast(subject ~ ., value.var = "n")? -
@aosmith 我重新表述了我的问题。我尝试了 dcast(subject~ ., value.var = "n"),但我得到 2 和 4(分别针对主题 11 和 99),我应该得到 0,因为在不同条件下他们没有观察到符合我的 z.score 限制