2017-04-17 72 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> 
相关问题