2つのタイムスタンプ間の経過時間を計算するためにエレガントな関数を書こうとしています。 hhmm。経過時間を分の整数で返したいと思います。R:2つの数値の間の経過時間を計算します。たとえば、944と1733は469分です。
ここでは、おそらく大幅に向上させることができ、これまでのところ私のソリューションです:
#Treatment of varous length inputs:
#1 digit = m
#2 digits = mm
#3 digits = hmm
#4 digits = hhmm
#5+ digits = failure
elapsedtime <- function(S,E) {
S<-c(as.character(S))
E<-c(as.character(E))
if (length(S)!=length(E)) {
stop("Invalid input")
}
for (i in seq(1:length(S))) {
if (nchar(S[i])>4) {S[i]<-NA}
if (nchar(E[i])>4) {E[i]<-NA}
while (nchar(S[i])<4) {
S[i]<-paste('0',S[i],sep='')
}
while (nchar(E[i])<4) {
E[i]<-paste('0',E[i],sep='')
}
S[i]<-as.character(as.numeric(substr(S[i],1,2))*60+as.numeric(substr(S[i],3,4)))
E[i]<-as.character(as.numeric(substr(E[i],1,2))*60+as.numeric(substr(E[i],3,4)))
}
S<-as.numeric(S)
E<-as.numeric(E)
return(E-S)
}
elapsedtime(944,1733)
elapsedtime(44,33)
elapsedtime(44,133)
elapsedtime(c(944,44),c(1733,33))
elapsedtime(c(44,44),c(33,133))
elapsedtime(944,17335)
elapsedtime(c(944,945),c(1733,17335))
elapsedtime(c(944,945),c(1733,17335,34))
私も1と2桁のケースに対処する必要性に結婚しないんだけど、私のことができるようにする必要があります3桁または4桁の入力を処理します。私はこれを多くの日付で実行しています.3/4桁をすばやく実行すると、1,2,3または4桁をゆっくりと実行するほうがはるかに適しています。
/編集:回
私はそれが好きです。ソリューションに感謝します。 %%関数は正確に何をしますか? – Zach
Modulus演算子で、整数の除算で余りを計算します。 – James
もちろん!もう一度ありがとう、それは速かった! – Zach