在R数据框中创建一个新列,它是最后一个数据点减去前一个数据点

时间:2017-04-28 02:42:47

标签: r dataframe

我有这个数据框:

Button,Intensity,Acc,Intensity,RT,Time
0,30,0,0,0,77987.931
1,30,1,13.5,0,78084.57
1,30,1,15,0,78098.624

我想添加一个列,它是两个TIME计数之间的差值,例如:

Button,Intensity,Acc,Intensity,RT,Time, DELTA
0,30,0,0,0,77987.931, 0
1,30,1,13.5,0,78084.57, 96.639
1,30,1,15,0,78098.624, 14.054

我是R的新手,所以我不知道从哪里开始。谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用lag包中的dplyr功能。

# Create example data
dt <- read.csv(text = "Button, Intensity, Acc, Intensity, RT, Time
               0, 30, 0, 0, 0, 77987.931
               1, 30, 1, 13.5, 0, 78084.57
               1, 30, 1, 15, 0, 78098.624")

# Load package
library(dplyr)

dt2 <- dt %>% 
  # Calculate the lag difference
  mutate(Delta = Time - lag(Time)) %>%
  # Replace NA with 0
  mutate(Delta = ifelse(is.na(Delta), 0, Delta))

答案 1 :(得分:1)

我们可以使用base R来删除第一个元素和元素,取差异然后在开头追加0

df1$Delta <- with(df1, c(0, Time[-1]-Time[-nrow(df1)]))
df1$Delta
#[1]  0.000 96.639 14.054

或另一个选项是data.table我们转换了&#39; data.frame&#39;到data.table并使用:=

根据差异分配(shift新列
library(data.table)
setDT(df1)[, Delta := Time - shift(Time, fill = Time[1L])]