【发布时间】:2014-03-07 01:32:52
【问题描述】:
这是我的真实数据集的简单数据框:
df <- data.frame(ID=rep(101:102,each=9),phase=rep(1:3,6),variable=rep(LETTERS[1:3],each=3,times=2),mm1=c(1:18),mm2=c(19:36),mm3=c(37:54))
我想首先按 ID 和变量分组,然后对于值(mm1,mm2,mm3),从所有阶段(阶段 1 到阶段 3)中减去阶段 3,这将使 mm(1-3)处于阶段 1全部 -2,在第 2 阶段全部为 -1,第 3 阶段全部为 0。
R 抛出错误“Ops.data.frame(x, x[3, ]) 中的错误:- 仅针对大小相同的数据帧定义” 正如我所尝试的:
df1 <- ddply(df, .(ID, variable), function(x) (x - x[3,]))
任何建议将不胜感激。 输出应该是这样的:
ID phase variable mm1 mm2 mm3
101 1 A -2 -2 -2
101 2 A -1 -1 -1
101 3 A 0 0 0
101 1 B -2 -2 -2
101 2 B -1 -1 -1
101 3 B 0 0 0
101 1 C -2 -2 -2
101 2 C -1 -1 -1
101 3 C 0 0 0
102 1 A -2 -2 -2
102 2 A -1 -1 -1
102 3 A 0 0 0
102 1 B -2 -2 -2
102 2 B -1 -1 -1
102 3 B 0 0 0
102 1 C -2 -2 -2
102 2 C -1 -1 -1
102 3 C 0 0 0
【问题讨论】:
-
您的公式应该类似于
ddply(df, .(ID, variable), transform, mm1 = phase - mm1, mm2 = ...),但我无法弄清楚您是如何从样本数据中获得所需输出的