首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >日期和不可信的日期

日期和不可信的日期
EN

Stack Overflow用户
提问于 2019-10-10 11:48:21
回答 1查看 53关注 0票数 1

该问题与数据帧有关,该数据帧由缺失值、日期和在日和/或月之前具有负号的一些不可信的日期组成。我使用下面的代码将excel文件中的数据读取到R中

代码语言:javascript
复制
df <- data.frame(read_excel("dat.xlsx", col_types = c("numeric", "guess"))) 

这会将日期更改为数字值。当然,如果我想获得日期,我可以将上面代码中的“猜测”替换为“日期”。但是,我希望获得不可信的日期,并将所有其他条目替换为NA。数据帧的一个示例是

代码语言:javascript
复制
df<-data.frame("id"=c(1,2,3,4,5),
"date" = c("-2/8/2018","-22/11/2018","-1/-2/2018",39586,"NA"))

数值39586实际上是将excel文件读入R后转换为数字的日期(即11/04/2008)。

通过使用

代码语言:javascript
复制
df$date<-df[is.integer(df$date)] <- NA

我尝试将所有整数转换为NA并保留不可信的日期,但date列的所有组件都更改为NA,即

代码语言:javascript
复制
  id date
1  1   NA
2  2   NA
3  3   NA
4  4   NA
5  5   NA

如何解决这个问题?预期的输出将如下所示

代码语言:javascript
复制
  id        date
1  1   -2/8/2018
2  2 -22/11/2018
3  3  -1/-2/2018
4  4          NA
5  5          NA

其次,如何删除日期后面的减号?我很感谢你在这方面的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-10 12:36:11

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

代码语言:javascript
复制
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>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58315192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档