提问者:小点点

R根据日期选择后,缺失的行比应该的多(或少)


我正在制作一个数据框,其中包含从1871年到2016年的过去棒球运动员的比赛记录。DF名称是Master.new我想做的是获取那些在1903年后首次亮相的。(“首次亮相”列名)运行代码删除不需要的行后,新的DF擦除了比它应该擦除的更多,我知道是因为摘要命令。

我所做的就是

>

  • 确保“首次亮相”列的类是“日期”

    sapply(Master.new, class)
    

    这就是结果

       playerID   birthYear       debut   finalGame 
    "character"   "integer"      "Date"      "Date" 
    

    运行摘要命令检查结构,在这里我可以看到日期范围并验证第一个日期是在1871年(19105年观察)

    摘要(Master.new)

    这就是结果

     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创建一个新的DF称为Master.new。出道有7899观察,小于19105的Master.new这似乎是合乎逻辑的,因为我消除了多年前1903行。

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

    然后,我在新的Data FrameMaster.new上运行了摘要命令

    summary(Master.new.debut)
    

    下面是我收到的。我希望确认第一个记录必须在1903年。我得到的是最小值在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个答案

    匿名用户

    问题在下面一行:

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

    原因是1903-01-01部分被视为绝对数,并且由于date也被存储为与1970-01-01的偏移量。因此,

    请将该行更改为:

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

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