R 连续减去data.table中的列

R 连续减去data.table中的列,r,data.table,R,Data.table,假设我有以下data.table: player_id prestige_score_0 prestige_score_1 prestige_score_2 prestige_score_3 prestige_score_4 1: 100284 0.0001774623 2.519792e-03 5.870781e-03 7.430179e-03 7.937716e-03 2: 103819 0.0001774623

假设我有以下data.table:

 player_id prestige_score_0 prestige_score_1 prestige_score_2 prestige_score_3 prestige_score_4
   1:    100284     0.0001774623     2.519792e-03     5.870781e-03     7.430179e-03     7.937716e-03
   2:    103819     0.0001774623     1.426482e-03     3.904329e-03     5.526974e-03     6.373850e-03
   3:    100656     0.0001774623     2.142518e-03     4.221423e-03     5.822705e-03     6.533448e-03
   4:    104745     0.0001774623     1.084913e-03     3.061197e-03     4.383649e-03     5.091851e-03
   5:    104925     0.0001774623     1.488457e-03     2.926728e-03     4.360301e-03     5.068171e-03
我想从列
prestige\u score\u 0开始找出每列中的值之间的差异

在一个步骤中,它应该是这样的:
df[,prestige\u score\u 0]-df[,prestige\u score\u 1]


如何在data.table中执行此操作(并将此差异保存为data.table并保留播放器id)?

您可以使用for循环-

for(i in c(1:(ncol(df)-1)){
    df[, paste0("diff_", i-1, "_", i)] = df[, paste0("prestige_score_", i-1)] - 
                                              df[, paste0("prestige_score_", i)]
}

但是,如果有很多列,这可能不是最有效的方法。

您可以使用for循环-

for(i in c(1:(ncol(df)-1)){
    df[, paste0("diff_", i-1, "_", i)] = df[, paste0("prestige_score_", i-1)] - 
                                              df[, paste0("prestige_score_", i)]
}

但是,如果您有很多列,这可能不是最有效的方法。

这就是如何以整洁的方式完成这项工作:

#保持整洁

df2这就是如何以整洁的方式完成这项工作:

#保持整洁

df2你可以用一个移位的dt来减去整个dt

dt = data.table(id=c("A","B"),matrix(rexp(10, rate=.1), ncol=5))
dt_shift = data.table(id=dt[,id], dt[, 2:(ncol(dt)-1)] - dt[,3:ncol(dt)])

你可以用一个移位的dt减去一个完整的dt

dt = data.table(id=c("A","B"),matrix(rexp(10, rate=.1), ncol=5))
dt_shift = data.table(id=dt[,id], dt[, 2:(ncol(dt)-1)] - dt[,3:ncol(dt)])