这是我的df(data.frame):
group value
1 10
1 20
1 25
2 5
2 10
2 15
Run Code Online (Sandbox Code Playgroud)
我需要按组计算连续行中值之间的差异.
所以,我需要一个结果.
group value diff
1 10 NA # because there is a no previous value
1 20 10 # value[2] - value[1]
1 25 5 # value[3] value[2]
2 5 NA # because group is changed
2 10 5 # value[5] - value[4]
2 15 5 # value[6] - value[5]
Run Code Online (Sandbox Code Playgroud)
虽然,我可以通过使用来处理这个问题ddply,但需要花费太多时间.这是因为我的团队中有很多团体df.(我的超过1,000,000个团体df)
有没有其他有效的方法来处理这个问题?
我有一个像这样的数据帧:
df <- data.frame(start=c(5,4,2),end=c(2,6,3))
start end
5 2
4 6
2 3
Run Code Online (Sandbox Code Playgroud)
我想要以下结果:
start end diff
5 2
4 6 1
2 3 -1
Run Code Online (Sandbox Code Playgroud)
基本上它是:
end[2] (second row) - start[1] = 6-5=1
和 end[3] - start[2] = 3-4 = -1
在R中这样做的好方法是什么?
我有这样的数据:
Incident.ID.. = c(rep("INCFI0000029582",4), rep("INCFI0000029587",4))
date = c("2014-09-25 08:39:45", "2014-09-25 08:39:48", "2014-09-25 08:40:44", "2014-10-10 23:04:00", "2014-09-25 08:33:32", "2014-09-25 08:34:41", "2014-09-25 08:35:24", "2014-10-10 23:04:00")
df = data.frame(Incident.ID..,date, stringsAsFactors = FALSE)
df
Incident.ID.. date
1 INCFI0000029582 2014-09-25 08:39:45
2 INCFI0000029582 2014-09-25 08:39:48
3 INCFI0000029582 2014-09-25 08:40:44
4 INCFI0000029582 2014-10-10 23:04:00
5 INCFI0000029587 2014-09-25 08:33:32
6 INCFI0000029587 2014-09-25 08:34:41
7 INCFI0000029587 2014-09-25 08:35:24
8 INCFI0000029587 2014-10-10 23:04:00
Run Code Online (Sandbox Code Playgroud)
我用这个函数来计算时间差(以秒为单位):
padded.diff = function(x) c(0L, diff(x))
df2=within(df, {
date = strptime(date, format="%Y-%m-%d %H:%M:%S")
date.diff = padded.diff(as.numeric(date)) …Run Code Online (Sandbox Code Playgroud) 例如
a <- c(7, 10, 5, 4, 11)
我想 b 为:
b[1] = 0,
b[2] = a[2] - a[1],
b[3] = a[3] - a[2],
b[4] = a[4] - a[3],
b[5] = a[5] - a[4]
是否有自动获取这些值的功能?