2017-04-17 73 views
1

我需要幫助。我試圖將date_time列值根據txt_col列的匹配值和不匹配標記爲NA的列值複製到新列中。這裏是我的代碼:ifelse on數據幀列如果匹配時用日期時間列值替換

df$new_col <- ifelse(df$txt_col == "apple", df$date_time, NA) 

不過,我得到的數字在新列,而不是日期時間:

new_col 
1477962000 
1451755980 
1451755980 
1451755980 

當在str(df)看,列date_timePOSIXct。我試圖轉換as.numericPOSIXct,它沒有工作。如果你有更優雅的方式去做我想要達到的目標,那麼如果你分享的話,將會非常感激。謝謝。

+0

它們是datetime的數值等於自1970-01-01以來的秒數。將所有東西包裝在'as.POSIXct()'中,你應該沒問題。 – thelatemail

+0

不要忘記包括一個時區,當你再次包裝它時,當tz在中流改變時,處理變得非常有趣:-) – r2evans

+0

'as.POSIXct(1477962000,origin =「1970-01-01 00:00: 00「)'適合我。 – r2evans

回答

4

程序包dplyr作爲一個更嚴格的函數if_else驗證真假組件的類。明確地提供NA值的類別使得這更「安全」

library(dplyr) 
df <- data.frame(txt_col = c("apple", "apple", "orange"), 
       date_time = as.POSIXct(c("2017-01-01", "2017-01-02", "2017-01-03"))) 

# use dplyr::if_else instead, and provide explicit class 
df$new_col <- if_else(df$txt_col == "apple", df$date_time, as.POSIXct(NA)) 

df 
# txt_col date_time new_col 
# 1 apple 2017-01-01 2017-01-01 
# 2 apple 2017-01-02 2017-01-02 
# 3 orange 2017-01-03  <NA> 
相關問題