R:如何基于因子计算差异';s级?

R:如何基于因子计算差异';s级?,r,R,我有一个数据框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

我有一个数据框
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)

mytable$outcome[mytable$measure==“B”]我会使用
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”,Summary,outcome_diff=-diff(outcome))

,在base中您可以这样做:

ans <- sapply(split(myTable, myTable$person), function(x) {
    diff(x[order(x$measure), 3])
})

data.frame(person = names(ans), outcome_dif = ans)

##   person outcome_dif
## 1      1         0.3
## 2      2         0.9
## 3      3        -1.5

ansA
数据表
解决方案:

library(data.table)
DT <- as.data.table(dat)
DT[  , list(outcome_diff = outcome[measure == "A"] - 
              outcome[measure == "B"]),person]
# person outcome_diff
# 1:      1         -0.3
# 2:      2         -0.9
# 3:      3          1.5
库(data.table)

谢谢!我来看看
plyr
。至于
diff
备选方案,我不确定自己是否理解它:因为
output
的长度为6,
diff(output)
的长度应该为5。因此,为了获得所需的
结果_diff
,我们应该选择
diff(output)
的奇数元素,对吗?