我有一个数据框 mytable
对一组人进行两次测量的结果,A 和 B。
person measure outcome
1 A 3.6
2 A 2.3
3 A 4.2
1 B 3.9
2 B 3.2
3 B 2.7
我想为每个人计算 A 和 B 的分数之间的差异。也就是说,我想获得:
person outcome_diff
1 -0.3
2 -0.9
3 1.5
我搜索了一个答案,但我只发现了一个因子水平内的一些相关转换,而不是跨越它们。
我终于设法通过执行以下操作来解决它:
mytable$outcome[mytable$measure=="B"] <- -1*mytable$outcome[mytable$measure=="B"]
outtable <- aggregate(outcome ~ person, data=mytable, FUN=sum)
虽然它有效,但我想知道如何在不弄乱原始表格的情况下做到这一点。此外,该解决方案非常适合计算差异。实现相同目标的更通用方法是什么?
最佳答案
我会用 plyr
:
ddply(mytable, "person", summarize,
outcome_diff = outcome[measure == "A"] -
outcome[measure == "B"])
# person outcome_diff
# 1 1 -0.3
# 2 2 -0.9
# 3 3 1.5
假设您总是恰好有两个度量
A
和 B
按照这个顺序,你也可以只做 ddply(mytable, "person", summarize, outcome_diff = -diff(outcome))
.
关于R:如何根据因子水平计算差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17181877/