在R中的日期时间中将NA更改为空白

时间:2018-03-12 13:02:53

标签: r na

这可能是一个简单的问题,但我尝试了一些事情而且他们没有工作。 我有一个包含日期/时间格式的大型数据框。我的数据框的一个例子是:

  Index       FixTime1                  FixTime2
    1     2017-05-06 10:11:03               NA
    2            NA              2017-05-07 11:03:03

我想从数据框中删除所有NAs并使它们成为"" (空白)。我试过了:

df[is.na(df)]<-"" 

但这会产生错误:

Error in as.POSIXlt.character(value) : 
character string is not in a standard unambiguous format

同样,这可能很容易修复,但无法找到如何执行此操作,同时保留每个列的时间/日期格式

2 个答案:

答案 0 :(得分:1)

这是玩具数据集的可能解决方案,根据您的需求调整此代码:

df<-data.frame(date=c("01/01/2017",NA,"01/02/2017"))
df
        date
1 01/01/2017
2       <NA>
3 01/02/2017

从因素到字符,然后删除NA

 df$date <- as.character(df$date)
 df[is.na(df$date),]<-""
 df
            date
    1 01/01/2017
    2           
    3 01/02/2017

在您的具体示例中,这可能没问题:

df_2<-data.frame(Index=c(1,2),
+                FixTime1=c("2017-05-06 10:11:03",NA),
+                FixTime2=c(NA,"2017-05-07 11:03:03"))


df_2<-data.frame(lapply(df_2, as.character), stringsAsFactors=FALSE)

df_2[is.na(df_2$FixTime1),"FixTime1"]<-"" 
df_2[is.na(df_2$FixTime2),"FixTime2"]<-""
df_2
  Index            FixTime1            FixTime2
1     1 2017-05-06 10:11:03                    
2     2                     2017-05-07 11:03:03

答案 1 :(得分:1)

我们可以使用replace

df[] <- replace(as.matrix(df), is.na(df), "")
df
#   Index            FixTime1            FixTime2
#1     1 2017-05-06 10:11:03                    
#2     2                     2017-05-07 11:03:03