R中的功能将数字更改为时间格式,Excel文件中不带点

时间:2018-09-19 19:00:41

标签: r excel

我想将excel文件中的2,3和4位数字更改为小时和分钟格式,数字之间不带点。例如我有83和114和1159。我想在r中编写一个函数,该函数可以将右边的前两位数字视为分钟,将第三位和第四位视为小时,因此对于114,该功能应将14视为分钟,然后将1视为小时,其他数字相同。

为澄清起见,我的问题是如何将83、141更改为不带点141 = 0141和83 = 0123的小时和分钟

谢谢 塞勒姆

1 个答案:

答案 0 :(得分:0)

这是一个非常具体的函数,我不知道这是否是最好的方法,但是它将读取右边的任何两位数字(最小值)和左边的任何两位数字(hrs)。如果分钟数超过60,则会将其添加到总时数中。

extractTime.c<-function(list_char){

Test_Char<-as.character(list_char)

a1 <- as.matrix(Test_Char) ;
a2 <- strsplit(a1, "") ;


Data_List<-list()
List_Length<-length(a2)

for(i in 1:List_Length){

Char_Length<-length(a2[[i]])

if(Char_Length==2){
min1<-a2[[i]][1]
min2<-a2[[i]][2]
MIN<-paste(min1,min2, sep="")

MIN<-as.numeric(MIN)
HR=0

if(MIN/60 > 1){
  Tot_Hrs<-MIN/60
  Tot_Hrs_Char<-as.character(Tot_Hrs)

  Percent_Hr<-regmatches(Tot_Hrs_Char, gregexpr("\\W\\d\\d"
                                      , Tot_Hrs_Char, perl=TRUE))
  Percent_Hr<-as.numeric(Percent_Hr)

  MIN<-Percent_Hr*60
  MIN<-round(MIN)

  HR<-regmatches(Tot_Hrs_Char, gregexpr("\\d+\\W"
                                        , Tot_Hrs_Char, perl=TRUE))
  HR<-regmatches(HR,gregexpr("\\d+", HR, perl=T))

  HR<-as.numeric(HR)

  }else if(MIN/60==1){
   HR=HR+1
   MIN=0

 }else{
  HR=0

 }

Time<-data.frame(HR,MIN)

Data_List[[i]] <-Time


}else if(Char_Length==3){
hr1<-a2[[i]][1]
min1<-a2[[i]][2]
min2<-a2[[i]][3]
MIN<-paste(min1,min2,sep="")

hr1<-as.numeric(hr1)
MIN<-as.numeric(MIN)
if(MIN/60 > 1){
  Tot_Hrs<-MIN/60
  Tot_Hrs_Char<-as.character(Tot_Hrs)

  Percent_Hr<-regmatches(Tot_Hrs_Char, gregexpr("\\W\\d\\d"
                                                , Tot_Hrs_Char, perl=TRUE))
  Percent_Hr<-as.numeric(Percent_Hr)

  MIN<-Percent_Hr*60
  MIN<-round(MIN)

  HR<-regmatches(Tot_Hrs_Char, gregexpr("\\d+\\W"
                                        , Tot_Hrs_Char, perl=TRUE))
  HR<-regmatches(HR,gregexpr("\\d+", HR, perl=T))

  HR<-as.numeric(HR)
  hr1<-as.numeric(hr1)
  HR<-(HR+hr1)

}else if(MIN/60==1){
  HR=hr1+1
  MIN=0   

}else{
  HR<-hr1
}

Time<-data.frame(HR,MIN)
Data_List[[i]] <-Time

}else if (Char_Length==4){
hr1<-a2[[i]][1]
hr2<-a2[[i]][2]
min1<-a2[[i]][3]
min2<-a2[[i]][4]
MIN<-paste(min1,min2, sep="")
HROG<-paste(hr1,hr2, sep="")

MIN<-as.numeric(MIN)

if(MIN/60 > 1){
  Tot_Hrs<-MIN/60
  Tot_Hrs_Char<-as.character(Tot_Hrs)

  Percent_Hr<-regmatches(Tot_Hrs_Char, gregexpr("\\W\\d\\d"
                                                , Tot_Hrs_Char, perl=TRUE))
  Percent_Hr<-as.numeric(Percent_Hr)

  MIN<-Percent_Hr*60
  MIN<-round(MIN)

  HR<-regmatches(Tot_Hrs_Char, gregexpr("\\d+\\W"
                                        , Tot_Hrs_Char, perl=TRUE))
  HR<-regmatches(HR,gregexpr("\\d+", HR, perl=T))

  HR<-as.numeric(HR)
  HROG<-as.numeric(HROG)
  HR<-(HR+HROG)

}else if(MIN/60==1){
  HR=HROG+1
  MIN=0   

}else{
  HR<-HROG

}

Time<-data.frame(HR,MIN)
Data_List[[i]] <-Time


}else{}



}
Fin_DF<-do.call(rbind.data.frame, Data_List)
return(Fin_DF)
}

然后我们调用上面编写的函数...

Test<-c(183,1225,12,1001,260)
A<-extractTime.c(Test)

> A
  HR MIN
1  2  23
2 12  25
3  0  12
4 10   1
5  3   0