【发布时间】:2016-01-17 16:27:29
【问题描述】:
我想将一行中的列值与下一行相加。
> df
+----+------+--------+------+
| id | Val | Factor | Col |
+----+------+--------+------+
| 1 | 15 | 1 | 7 |
| 3 | 20 | 1 | 4 |
| 2 | 35 | 2 | 8 |
| 7 | 35 | 1 | 12 |
| 5 | 40 | 1 | 11 |
| 6 | 45 | 2 | 13 |
| 4 | 55 | 1 | 4 |
| 8 | 60 | 1 | 7 |
| 9 | 15 | 2 | 12 |
..........
我想根据id 和Col 得到Row$Val + nextRow$Val 的总和的平均值。我不能假设id 或Col 是连续的。
我正在使用 ddply 来总结我的 df。我试过了
> ddply(df, .(Factor), summarize,
max(Val),
sum(Val),
mean(Val + df[df$id == id+1 & df$Col = Col]$Val)
)
> "longer object length is not a multiple of shorter object length"
【问题讨论】:
-
小心,如果你在取平均值之前求和,你只是在返回总和。
mean类似于mean(c(3, 5))。或者,只需在求和后手动除以 2。 -
只需将值移一即可。
-
@alistaire 谢谢。很高兴知道。关于如何解决问题的任何建议?
-
@DavidArenburg 你能花点钱吗?
-
类似
x <- 1:10 ; (head(x, -1) + tail(x, -1))/2的东西(使用一些模拟数据)。如果你想按组使用ave。或者可以使用来自dplyr的lag与group_by的组合,或来自data.table的shift与by的组合。我敢肯定 SO 上有很多这样的东西。