代码之家  ›  专栏  ›  技术社区  ›  T Richard

日期和难以置信的日期

  •  1
  • T Richard  · 技术社区  · 5 年前

    这个问题涉及一个数据框架,它由丢失的值、日期和一些在日期和/或月份之前带有负号的不可信日期组成。我用代码把数据从一个excel文件读入r

    df <- data.frame(read_excel("dat.xlsx", col_types = c("numeric", "guess"))) 
    

    这会将日期更改为数值。当然,如果我想获得日期,我可以将上面代码中的“guess”替换为“date”。但是,我想获得难以置信的日期,并用na替换所有其他条目。数据帧的一个例子是

    df<-data.frame("id"=c(1,2,3,4,5),
    "date" = c("-2/8/2018","-22/11/2018","-1/-2/2018",39586,"NA"))
    

    数值39586实际上是一个日期(即2008年4月11日),在将excel文件读入r之后,该日期被转换为数字。

    使用

    df$date<-df[is.integer(df$date)] <- NA
    

    我试图将所有整数转换为na并保留不可信的日期,但是date列的所有组件都变为na,即

      id date
    1  1   NA
    2  2   NA
    3  3   NA
    4  4   NA
    5  5   NA
    

    如何解决这个问题?预期的产出看起来像

      id        date
    1  1   -2/8/2018
    2  2 -22/11/2018
    3  3  -1/-2/2018
    4  4          NA
    5  5          NA
    

    其次,我怎样才能去掉日期上的减号?我感谢你在这方面的帮助。

    1 回复  |  直到 5 年前
        1
  •  2
  •   Ronak Shah    5 年前

    我们可以利用 gsub 将数字替换为负号99,然后使用 replace 将值转换为 NA 不遵循日期模式。

    df$date <- gsub("-\\d+", "99", df$date)
    df$date <- replace(df$date, !grepl("\\d+/\\d+/\\d+", df$date), NA)
    df
    
    #  id       date
    #1  1  99/8/2018
    #2  2 99/11/2018
    #3  3 99/99/2018
    #4  4       <NA>
    #5  5       <NA>