R根据日期选择后,丢失的行数(或更少的行数)比应有的数量少

时间:2017-12-10 16:19:11

标签: r date

我正在研究一个数据框架,该框架由过去的棒球运动员组成,其中包括1871年至2016年的比赛记录.DF名称为Master.new 我想要做的就是让那些在1903年之后首次亮相的人。("首次亮相"专栏名称) 在运行代码以删除不需要的行之后,新的DF擦除了比它应该更多的东西,我知道因为汇总命令。

我所做的是

  1. 确保"首次亮相"列是"日期"

    sapply(Master.new, class)
    
  2. 这是结果

       playerID   birthYear       debut   finalGame 
    "character"   "integer"      "Date"      "Date" 
    
    1. 运行summary命令检查结构,在这里我可以看到日期范围并验证第一个日期是在1871年(19105观察)

      summary(Master.new)

    2. 这就是结果  

       playerID           birthYear        debut              finalGame
      Length:19105 Min. :1820 Min. :1871-05-04 Min. :1871-05-05
      Class :character 1st Qu.:1895 1st Qu.:1919-04-24 1st Qu.:1923-04-29
      Mode :character Median :1937 Median :1961-06-09 Median :1966-10-02
      Mean :1931 Mean :1956-02-23 Mean :1960-12-20
      3rd Qu.:1969 3rd Qu.:1995-04-26 3rd Qu.:2000-09-29
      Max. :1996 Max. :2016-10-02 Max. :2016-10-02
      NA's :132 NA's :195 NA's :195

      3.我运行命令只选择变量的记录"首次亮相"大于或早于1903-01-01创建一个名为Master.new.debut的新DF,其观测值为7899,低于Master.new的19105,这似乎是合乎逻辑的,因为我正在消除1903年以前的行数。

          Master.new.debut <- Master.new[Master.new $debut >= 1903-01-01,]
      
      1. 然后我在新数据框Master.new.debut

        上运行了summary命令
        summary(Master.new.debut)
        
      2. 以下是我收到的内容。 我预计确认第一批记录必须在1903年。 我得到的是Min的记录。价值是在1975年。 我需要的帮助是弄清楚为什么不是我1903年的第一张唱片,以及1903年至1975年间所有唱片都发生了什么。

        谢谢 哈维尔

         
         playerID           birthYear        debut              finalGame         
         Length:7899        Min.   :1946   Min.   :1975-04-07   Min.   :1975-04-21  
         Class :character   1st Qu.:1964   1st Qu.:1988-09-02   1st Qu.:1994-07-31  
         Mode  :character   Median :1974   Median :1999-05-14   Median :2005-04-21  
                            Mean   :1973   Mean   :1998-04-21   Mean   :2003-04-21  
                            3rd Qu.:1983   3rd Qu.:2008-07-13   3rd Qu.:2013-09-29  
                            Max.   :1996   Max.   :2016-10-02   Max.   :2016-10-02  
                            NA's   :195    NA's   :195          NA's   :195  
        
        

1 个答案:

答案 0 :(得分:0)

问题出在下面一行:

 Master.new.debut <- Master.new[Master.new $debut >= 1903-01-01,]

原因是1903-01-01部分被视为绝对数字,因为date也被存储为1970-01-01的偏移量。因此,>=操作是比较日期的偏移值。 1901大约相当于5年。因此,它显示1975之后的日期。

请将行更改为:

Master.new.debut <- Master.new[Master.new $debut >= '1903-01-01',]

强制进行日期比较。您甚至可以使用as.Date()函数在日期转换字符串文字。