【问题标题】:Dates and implausible dates日期和难以置信的日期
【发布时间】:2019-10-10 03:48:20
【问题描述】:

此问题与由缺失值、日期和一些在日期和/或月份之前带有负号的不可信日期组成的数据框有关。我使用代码将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实际上是一个日期(即11/04/2008),将excel文件读入R后转换为数值。

配合使用

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

我尝试将所有整数转换为 NA 并保留不可信的日期,但日期列的所有组件都更改为 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

其次,如何删除附在日期上的减号?感谢您在这方面的帮助。

【问题讨论】:

  • 您真的有来自 Excel 的负日期吗?
  • @TimBiegeleisen 是的,负日期来自 Excel。与日期和月份相关的否定表示这些日期和月份是未知的。
  • 缺少的日期/月份是否会取消该日期的资格,或者您是否希望使用一些默认值来代替未知值?
  • 您可以通过 replace(df$date, !grepl('-?\\d+/-?\\d+/\\d+', df$date), NA) 或删除负号 replace(gsub("-", "", df$date), !grepl('-?\\d+/-?\\d+/\\d+', df$date), NA) 来获得预期的输出,但这对您有用吗?
  • gsub("-\\d{1,2}", "99", df$date).

标签: r date dataframe


【解决方案1】:

我们可以使用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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-12
    • 2023-03-14
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    • 1970-01-01
    相关资源
    最近更新 更多