2017-10-18 67 views
1

嗨,我有如何連接一個字符根據條件中的R

 
     Table_Number.130. ID_HOUR Date Time_.EST. 
1     137  480 365  600 
2     340  0 365  1612 
3     340  0 365  1619 
4     340  0 365  657 
5     340  0 365  700 
6     129  60 365  700 
7     340  0 365  1703 
8     340  0 365  1709 
9     340  0 365  1740 
10     340  0 365  1755 
11     129  60 365  800 
12     340  0 365  804 
13     340  0 365  811 
14     340  0 365  1817 
15     340  0 365  1825 
16     340  0 365  1833 
17     340  0 365  1839 
18     340  0 365  1848 
19     340  0 365  1857 
20     129  60 365  1900

我想轉換Time_.EST這個數據幀的列。字段插入時間的格式,但當我運行

x[,"Time_.EST."]<-format(as.Date(x[,"Time_.EST."], format="%H%M"), format = "%H:%M") 

該命令顯示在存在在Time_.EST 3個字符N/A。字段,但適用於4個字符。有沒有解決這個問題的方法。

+1

什麼是你的目標而努力與格式?可讀性?如果是這樣,只需插入冒號。是在做時間算術嗎?如果是這樣,只需將其轉換分鐘並保留數字即可。這是爲了別的嗎? – brittenb

+0

如果是關於拖尾'0'的填充,那麼可以使用'stringi'這樣的'stringi :: stri_pad_right(c(1619,657,700),4,0)'或'stringi :: stri_pad_right(x $ Time_.EST。,4,0)'在你的情況下。 –

+0

'strptime(sprintf(「%04s」,df $ Time_.EST。),format =「%H%M」)'。 – Abdou

回答

2

如果列中只有3個字符,將粘貼「0」。

x[["Time_.EST."]] = ifelse(nchar(x[["Time_.EST."]]) == 3, 
          paste0("0", x[["Time_.EST."]]), 
          x[["Time_.EST."]]) 
+0

我以前嘗試過,但它沒有解決,我把它作爲'x [[「Time_.EST。」]] = if(nchar(x [[「Time_.EST。」]])== 3){ paste0(「0」,x [[「Time_.EST。」]]), x [[「Time_.EST。」]])}'這是否有區別 –

+0

您使用了'if',單一時間,並沒有內置的「else」。我使用了'ifelse',它是矢量化的,並且內置了一個「else」。 – Gregor

1

你可以墊出的使用如下sprintf函數數字一組數字:

newtime <- sprintf("%04d",times$time) 
#Make a new list with at least 4 digits: adds leading zeroes as needed 
times <- cbind(newtime,times) 
#Combine the two together 

#A single step would also work 
times$newtimes <- sprintf("%04d",times$time) 

那麼你將永遠有一個4位數字與

相關問題