私は以前の質問(Difference between dates in many columns in R)に答えようとしています。私は、特定の列と、すぐに残っている列との間の時間差だけを必要としていることを認識しました。説明のための例:隣の列の日付の時差R
df <- data.frame(
Group=c("A","B"),
ID=c(1,2),
Date1=as.POSIXct(c('2016-04-25 09:15:29','2016-04-25 09:15:29')),
Date2=as.POSIXct(c('2016-04-25 14:01:19','2016-04-25 14:01:19')),
Date3=as.POSIXct(c('2016-04-26 13:28:19','2016-04-26 13:28:19')),
stringsAsFactors=F
)
希望する出力は、Date2-Date1とDate3-Date2です。もちろん、これは多くの列、つまりDate4-Date3などに拡張されますが、Date3-Date1は必要ありません。これを自動化するにはどうすればいいですか?
df$Date2_Date1 <- difftime(df$Date2,df$Date1, units = c("hours"))
df$Date3_Date2 <- difftime(df$Date3,df$Date2, units = c("hours"))
元の回答は@bgoldstに感謝します。
cmb <- combn(seq_len(ncol(df)-1L)+1L,2L);
res <- abs(apply(cmb,2L,function(x) difftime(df[[x[1L]]],df[[x[2L]]],units='hours')));
colnames(res) <- apply(cmb,2L,function(x,cns) paste0(cns[x[1L]],'_',cns[x[2L]]),names(df))
おかげ
適切な列を 'which'で見つけて、単純にdata.frameを上下に加算/減算することで隣接する列を計算することができます。 –
ありがとうジャスパー、これは非常にうまくいった。 Roman、少し試してみるといいですか? – Pete900