【问题标题】:Subset a dataframe using a array created by itself in R使用自己在 R 中创建的数组对数据框进行子集化
【发布时间】:2014-12-10 12:03:40
【问题描述】:

抱歉,我没有在标题中描述我的问题。

我的问题是

我有一个如下的数据框

| id | content | created_at          |
|----|---------|---------------------|
| 1  | hello   | 2014-12-10 00:00:00 |
| 2  | world   | 2013-11-11 00:00:00 |
| 3  | oh~no   | 2012-10-10 00:00:00 |
| 4  | helpme  | 2011-09-11 00:00:00 |

我想按时间间隔对这一帧进行子集化

例如:

  • 子集:2011 - 2012

    | 4 |帮我| 2011-09-11 00:00:00 |

  • 子集:2012 - 2013

    | 3 |哦~没有 | 2012-10-10 00:00:00 |

  • 子集:2013 - 2014

    | 2 |世界| 2013-11-11 00:00:00 |

  • 子集:2014 - 2015

    | 1 |你好 | 2014-12-10 00:00:00 |

以下是我尝试解决此问题的方法

  • 我尝试创建一个真假数组并在每一行中做

    ifelse( 
    
     difftime(DF$created_at,as.Date(ISOdate(seq(2004,2014),1,1))) >= 0 & 
    
     difftime(DF$created_at,as.Date(ISOdate(seq(2005,2015),1,1))) < 0
    
     , assign_to_subset_X, do_nothing)
    

但是....

我认为这不是一个好主意,尤其是我已经在使用 R....

然后我找到一些解决方案,例如应用

  apply(DF, 2, do_a_function_to_subset)

但我还是不知道要写这个函数

请给我一个提示。

【问题讨论】:

    标签: r subset


    【解决方案1】:

    这是一种可能的解决方案

    library(lubridate)
    df <- read.table(textConnection("  id | content | created_at          
     1  | hello   | 2014-12-10 00:00:00 
     2  | world   | 2013-11-11 00:00:00 
     3  | oh~no   | 2012-10-10 00:00:00 
     4  | helpme  | 2011-09-11 00:00:00 "), header=TRUE, sep="|")
    
    
    df$ts <- ymd_hms(df$created_at)
    
    ## create an interval
    myInt <- ymd("2011-01-01") %--% ymd("2011-12-31")
    df[df$ts %within% myInt, ]
    

    【讨论】:

      猜你喜欢
      • 2021-12-04
      • 2021-02-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-26
      • 2020-04-26
      • 1970-01-01
      • 1970-01-01
      • 2017-07-21
      相关资源
      最近更新 更多