在R中更快地创建差异列

在R中更快地创建差异列,r,dataframe,R,Dataframe,假设我在R中创建了以下数据帧 c1 <- sample(10) c2 <- sample(10) c3 <- sample(10) df1 <- data.frame(c1, c2, c3) c1我们循环遍历列,用shift得到lag,然后从原始值中减去它。我们将“data.frame”转换为“data.table”(setDT(df1)) 或者使用dplyr library(dplyr) df1 %>% mutate_each(funs(. - lag

假设我在R中创建了以下数据帧

c1 <- sample(10)
c2 <- sample(10)
c3 <- sample(10)
df1 <- data.frame(c1, c2, c3)

c1我们循环遍历列,用
shift
得到
lag
,然后从原始值中减去它。我们将“data.frame”转换为“data.table”(
setDT(df1)


或者使用
dplyr

library(dplyr)
df1 %>%
    mutate_each(funs(. - lag(.))) %>%
    na.omit()

或者选择
base R

tail(df1,-1) - head(df1,-1)
sapply(df1, diff)
或者另一种选择是

tail(df1,-1) - head(df1,-1)
sapply(df1, diff)

但是,
diff
比直接减法或使用
shift
(因为OP的帖子涉及性能)

您可以对所有列使用
diff
应用它

apply(df1, 2, diff)

只需
df1[-1,]-df1[-nrow(df1),]