【发布时间】:2021-05-04 11:22:21
【问题描述】:
我想使用这个问题的 ave 解决方案:subtract value from previous row by group 有两个组。
#Reproduceable example db:
FU <- c(5,10,20,2,7,20,6,14,8,20,15,17)
Studynr <- c(1,1,2,2,3,3,4,4,4,5,6,6)
Fugroup <- c(1,0,0,1,0,1,1,0,2,0,1,0)
db <- data.frame(Studynr,Fugroup,FU)
# code to calculate the difference consequetively
db$FUdiff <- ave(db$FU, db$Studynr, FUN=function(x) c(NA,diff(x)))
这是这段代码提供的表头:
| FU | Studynr | Fugroup | FUdiff |
|---|---|---|---|
| 5 | 1 | 1 | NA |
| 10 | 1 | 0 | 5 |
| 20 | 2 | 0 | NA |
| 2 | 2 | 1 | -18 |
| 7 | 3 | 0 | NA |
| 20 | 3 | 1 | 13 |
但我想要的是(切换 5 和 NA,因为 FU 组按 1 到 0 排序)
| FU | Studynr | Fugroup | FUdiff |
|---|---|---|---|
| 5 | 1 | 1 | 5 |
| 10 | 1 | 0 | NA |
| 20 | 2 | 0 | NA |
| 2 | 2 | 1 | -18 |
| 7 | 3 | 0 | NA |
| 20 | 3 | 1 | 13 |
我认为 ave 代码对我不起作用,因为每组的数据没有在数据库中连续排序。因此,我不想使用一个分组变量(db$Studynr),而是使用第二个分组变量(db$Fugroup)。有任何想法吗?谢谢!
(调整后的帖子)
【问题讨论】:
-
请
dput您的示例数据并显示您想要的结果。 -
“不幸的是,这个代码对我不起作用,因为每组的数据没有在数据库中连续排序。”你这里真正的不连续数据是什么?
-
如何将 diff 设为 0.61 和 1.64 ?计算方法是什么?
-
对不起,如果它令人困惑,我想连续计算差异:第一个日期 (15:32) 的值为 23.11,第二个 (15:51) 的值为 21.01,因此相差 2.10。第三个日期 (16:02) 有 22.65,因此与第二个日期相差 1.64。我自己的数据的不同之处在于我有一个分类变量(而不是示例中的时间)。我目前正在制作更好的示例数据!
-
刚刚更改了帖子,所以它只显示示例数据(而不是之前帖子中的数据)
标签: r dataframe data-wrangling