根据R中的值和NA过滤“POSIXct”“POSIXt”列

蚁穴

我有一个或多或少看起来像这样的数据框:

    tail(df)
    # A tibble: 6 x 3
      GEOGCD    OPER_DATE           TERM_DATE          
      <chr>     <dttm>              <dttm>             
    1 E05006867 2009-01-01 00:00:00 2019-03-31 00:00:00
    2 E05006868 2009-01-01 00:00:00 2019-03-31 00:00:00
    3 E05000066 2009-01-01 00:00:00 2018-05-02 00:00:00
    4 E05000067 2009-01-01 00:00:00 2018-05-02 00:00:00
    5 E05000068 2009-01-01 00:00:00 2018-05-02 00:00:00
    6 E05000064 2018-05-01 22:00:00 NA          
    
    str(df)
    tibble [52 × 3] (S3: tbl_df/tbl/data.frame)
     $ GEOGCD   : chr [1:52] "E05000064" "E05000065" "E05000066" "E05000067" ...
     $ OPER_DATE: POSIXct[1:52], format: "2009-01-01 00:00:00" "2009-01-01 00:00:00" "2009-01-01 00:00:00" ...
     $ TERM_DATE: POSIXct[1:52], format: "2018-05-02" "2018-05-02" "2018-05-02" ...

我想要做的是只选择那些 TERM_DATE 高于 2018-12-31 或者是 NA 的人。基本上是这样的:

3 E05000066 2009-01-01 00:00:00 2018-05-02 00:00:00
4 E05000067 2009-01-01 00:00:00 2018-05-02 00:00:00
5 E05000068 2009-01-01 00:00:00 2018-05-02 00:00:00
6 E05000064 2018-05-01 22:00:00 NA   

我尝试过不同的东西,像这样:

library(lubridate)
library(dplyr)    
df%>%
filter(TERM_DATE> as.Date("2018-12-31"| is.na(TERM_DATE)))

但我不断收到如下错误:

错误:filter()输入有问题..1
x 运算仅适用于数字、逻辑或复杂类型
ℹ 输入..1TERM_DATE > as.Date("2018-12-31" | is.na(TERM_DATE)).

你们中有人能理解为什么会这样,我应该做什么吗?

谢谢!

鸭子

试试这个方法:

library(dplyr)
#Code
newdf <- df%>%
  filter(TERM_DATE> as.POSIXct("2018-12-31") | is.na(TERM_DATE))

输出:

     GEOGCD           OPER_DATE  TERM_DATE
1 E05006867 2009-01-01 00:00:00 2019-03-31
2 E05006868 2009-01-01 00:00:00 2019-03-31
3 E05000064 2018-05-01 22:00:00       <NA>

@StupidWolf的智能解决方案也有效:

#Code 2
df%>%
  filter(TERM_DATE> as.Date("2018-12-31") | is.na(TERM_DATE))

输出:

     GEOGCD           OPER_DATE  TERM_DATE
1 E05006867 2009-01-01 00:00:00 2019-03-31
2 E05006868 2009-01-01 00:00:00 2019-03-31
3 E05000064 2018-05-01 22:00:00       <NA>

可以使用以下方法达到 OP 的预期输出:

#Code 3
newdf <- df%>%
  filter(TERM_DATE< as.POSIXct("2018-12-31") | is.na(TERM_DATE))

输出:

     GEOGCD           OPER_DATE  TERM_DATE
1 E05000066 2009-01-01 00:00:00 2018-05-02
2 E05000067 2009-01-01 00:00:00 2018-05-02
3 E05000068 2009-01-01 00:00:00 2018-05-02
4 E05000064 2018-05-01 22:00:00       <NA>

或使用as.Date(). 您需要将比较更改为<.

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据R中的值过滤行和列

将POSIXct或POSIXt转换为字符会导致R中的值非常大

r 根据列中的值过滤重复行

根据 R 中的条件将列的值设置为 NA

如何根据R中其他列的值过滤一列中的值?

当列名和要过滤的值都在变量中时,根据列过滤数据帧的行

根据R中的列和值替换矩阵中的项目

根据列中的值过滤行

如何根据dplyr中的值过滤列?

DataTables:根据列中的值过滤行

在 R 中过滤包含多个值和 null 的列

根据行中最大值和最小值之间的差异在 R 中过滤矩阵

根据另一列对列中的值进行过滤和替换

根据最高索引和列中的值过滤数据框中的行

如何过滤pydatatable列中的NA值?

如何使用PLSQL根据一列中的重复值和另一列中的连续值进行过滤?

如何根据 Python DataFrame 中的最大值过滤行和列

使用NA删除行和列,但保留R中的值

R Dataframe:如何根据另一列中的相应值乘以一列中的过滤值?

根据列和值的序列动态生成过滤器

根据子存在和列值过滤多对多关系

在R中,根据相邻列中字符的匹配项将值替换为NA

根据另一列中的条件过滤非NA值,并保留所有其他记录

Pandas - 根据后一列中是否存在值过滤一列中具有相同值和另一列中多个值的行

R中多列中的过滤值

使用 R 根据列值过滤大型数据框

根据多行中的值过滤R中的行

根据 R 中的查找表替换某些列和行中的 NA

根据JS中的动态对象和值过滤数组