【问题标题】:Change NA to blank in date time in R在 R 中将日期时间的 NA 更改为空白
【发布时间】:2018-03-12 21:11:31
【问题描述】:

这可能是一个简单的问题,但我已经尝试了一些方法,但它们都不起作用。 我有一个包含日期/时间格式的大型数据框。我的数据框的一个示例是:

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

我想从数据框中删除所有 NA 并将它们设为“”(空白)。我试过了:

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

但这给出了错误:

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

同样,这可能很容易修复,但找不到如何做到这一点,同时将这些列中的每一列保持为时间/日期格式

【问题讨论】:

  • 你有一个POSIXlt cclass。改成字符类
  • 您必须将所有日期转换为字符才能执行此操作。有 NA 有什么问题?
  • 我不能有 NA,因为我正在循环中执行 if 语句,并且由于 NA 而中断
  • 您可以使用&amp; !is.na( 来避免这种情况

标签: r na


【解决方案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

【讨论】:

    【解决方案2】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-15
      • 1970-01-01
      • 2014-08-02
      • 1970-01-01
      • 2020-09-13
      • 2020-10-14
      • 2019-12-26
      • 1970-01-01
      相关资源
      最近更新 更多