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)
的奇数元素,对吗?