gpt4 book ai didi

r - 如何计算R中每个组与初始值的差异?

转载 作者:行者123 更新时间:2023-12-04 17:02:14 26 4
gpt4 key购买 nike

我在 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

最佳答案

这是一个 data.table解决方案将是内存高效的,因为它是在 data.table 中通过引用设置的。设置键将按键变量排序

library(data.table)
DT <- data.table(df)
# set key to sort by indv then time
setkey(DT, indv, time)
DT[, c('val1','change') := list(val[1], val - val[1]),by = indv]
# And to show it works....
DT
## indv time val val1 change
## 1: A 6 5 5 0
## 2: A 10 10 5 5
## 3: A 12 7 5 2
## 4: B 8 4 4 0
## 5: B 10 3 4 -1
## 6: B 15 9 4 5

关于r - 如何计算R中每个组与初始值的差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13387245/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com