我在 R 中有这样排列的数据:
indv time val
A 6 5
A 10 10
A 12 7
B 8 4
B 10 3
B 15 9
对于每个人(indv
),我想val
从初始时间计算值( )的变化。所以我最终会得到这样的结果:
indv time val val_1 val_change
A 6 5 5 0
A 10 10 5 5
A 12 7 5 2
B 8 4 4 0
B 10 3 4 -1
B 15 9 4 5
谁能告诉我我该怎么做?我可以用
ddply(df, .(indv), function(x)x[which.min(x$time), ])
得到一张像
indv time val
A 6 5
B 8 4
但是,我无法弄清楚如何制作一个val_1
与每个人匹配的最小值的列。但是,如果我能做到这一点,我应该能够val_change
使用以下内容添加列:
df['val_change'] = df['val_1'] - df['val']
编辑:下面发布了两种出色的方法,但是它们都依赖于我的时间列进行排序,以便小时间值位于高时间值之上。我不确定我的数据是否总是如此。(我知道我可以先在 Excel 中排序,但我试图避免这种情况。)当表格如下所示时,我该如何处理:
indv time value
A 10 10
A 6 5
A 12 7
B 8 4
B 10 3
B 15 9