R不了解子集中的日期

时间:2019-07-15 07:43:28

标签: r date

我的代码有一个小问题,我不明白。我已经使用R多年了,但这对我来说是一个新问题。

我有一个带有日期(sdata)的数据框,并且我想查看该数据框对应于另一个数据框的哪一行(meteo),请参见下面的示例:

具有:

str(meteo)
'data.frame':   13880 obs. of  9 variables:
 $ station : int  22 22 22 22 22 22 22 22 22 22 ...
 $ Date    : Date, format: "1981-01-01" "1981-01-02" "1981-01-03" "1981-01-04" ...
 $ minte   : num  0 -0.2 1 0.4 -5.5 -8.3 -13.1 -14.2 -3.6 -0.5 ...
 $ maxte   : num  4.5 6.4 6.3 0.7 -3.6 -4.1 -3 2 3 1.8 ...
 $ MeanTemp: num  2.2 3.1 3.6 0.6 -4.6 -6.2 -8 -6.1 -0.3 0.6 ...
 $ prec08  : num  2.8 0.2 12 3.1 8 0.6 0 0 1.6 0.8 ...
 $ glorad  : num  1.9 2.5 0.6 0.6 3.2 4.9 3.8 0.6 0.6 5.1 ...
 $ makkepot: num  0.2 0.3 0.1 0.1 0.3 0.4 0.3 0.1 0.1 0.6 ...
 $ doy     : num  1 2 3 4 5 6 7 8 9 10 ...

str(sdata)
'data.frame':   4 obs. of  15 variables:
 $ Group.1      : int  1997 1998 1999 2000
 $ Sow          : Date, format: "1997-04-17" "1998-04-21" "1999-04-17" "2000-04-07"
 $ Emergence    : Date, format: "1997-05-06" "1998-05-02" "1999-04-29" "2000-04-22"
 $ FirstNode    : Date, format: "1997-06-11" "1998-05-31" "1999-05-31" "2000-05-22"
 $ FlagLeaf     : Date, format: "1997-06-16" "1998-06-15" "1999-06-15" "2000-05-30"
 $ Anthesis     : Date, format: NA NA NA NA
 $ Ripeness     : Date, format: "1997-07-27" "1998-07-29" "1999-08-02" "2000-07-25"
 $ Harvest      : Date, format: "1997-08-14" "1998-09-02" "1999-08-24" "2000-08-24"
 $ DOY_sow      : num  5951 6320 6681 7037
 $ DOY_emergence: num  19 11.2 12.2 15
 $ DOY_elong    : num  55 40 44 45
 $ DOY_flag     : num  60.5 55.6 59.6 53
 $ DOY_ant      : num  NaN NaN NaN NaN
 $ DOY_mat      : num  101.5 99.7 107 109
 $ DOY_har      : num  119 134 129 139

我遇到以下问题:

Browse[2]> sdata$Ripeness[1]
[1] "1997-07-27"
Browse[2]> sdata$Ripeness[2]
[1] "1998-07-29"
Browse[2]> sdata$Ripeness[3]
[1] "1999-08-02"
Browse[2]> which(meteo$Date==sdata$Ripeness[1])
integer(0)
Browse[2]> which(meteo$Date==sdata$Ripeness[2])
integer(0)
Browse[2]> which(meteo$Date==sdata$Ripeness[3])
[1] 6788
Browse[2]> which(meteo$Date==sdata$Ripeness[4])
[1] 7146
Browse[2]> which(meteo$Date=="1997-07-27")
[1] 6052
Browse[2]> which(meteo$Date=="1998-07-29")
[1] 6419

Browse[2]> str(sdata$Ripeness[1])
 Date[1:1], format: "1997-07-27"
Browse[2]> str(sdata$Ripeness[2])
 Date[1:1], format: "1998-07-29"

由于某种原因,R不喜欢sdata $ Ripeness的前两次出现,有人遇到过这样的问题吗?如果可以,该如何解决?

1 个答案:

答案 0 :(得分:1)

由于某种原因,R决定在日期上添加一个时间(仅当您查看POSIXct时才可见:

Browse[2]> as.POSIXct(sdata$Ripeness)
[1] "1997-07-27 14:00:00 CEST" "1998-07-29 18:00:00 CEST" "1999-08-02 02:00:00 CEST" "2000-07-25 02:00:00 CEST"

因此解决方法是:

as.Date(as.character(sdata$Ripeness))