为什么lubridate mdy()在lapply()中返回错误?

时间:2019-10-03 15:50:53

标签: r dplyr lubridate

我试图理解为什么我的lubridate mdy()函数在lapply()中返回错误以转换dplyr管道中的日期。我已经以类似的方法在其他数据上使用了mdy(),但是还没有看到这个问题。我对R还是比较陌生,但是直到现在为止都可以解决其他问题。我对如何使用lapply()不太熟悉。

我的数据是一个很大的.csv水质数据,我将其设置为仅显示有问题的数据。

library(dplyr)
library(lubridate)
require(lubridate)

wq.all<-as.data.frame(read.csv('C:/WQdata.csv',header=TRUE,stringsAsFactors = FALSE))

test.wq<-wq.all[1:5,12:13]

class(test.wq)
[1] "data.frame"
mode(test.wq)
[1] "list"
str(test.wq)
'data.frame':   5 obs. of  2 variables:
 $ YearMonth : chr  "2019-07" "2019-06" "2019-05" "2019-04" ...
 $ SampleTime: chr  "07/09/2019 14:44" "06/10/2019 14:17" "05/22/2019 14:31" "04/08/2019 14:15" ...

str(test.wq)中,SampleTime是我要从chr强制为date或至少为num的问题数据。

首先,我不需要时间值,因此我使用dplyr mutate()创建了仅包含10个字符的日期的SampleDate,然后尝试使用{ {1}}:

mdy()

但这会返回错误:

wq.date<-test.wq%>%
  mutate(SampleDate=str_sub(test.wq[[2]],start=0,end=10))%>%
  mdy(SampleDate)

如果我仅使用Error in lapply(list(...), .num_to_date) : object 'SampleDate' not found ,那么一切似乎都可以正常运行,并且为我提供了我一直在寻找的新mutate()列:

SampleDate

因此,即使我wq.date<-test.wq%>% mutate(SampleDate=str_sub(test.wq[[2]],start=0,end=10)) head(wq.date) YearMonth SampleTime SampleDate 1 2019-07 07/09/2019 14:44 07/09/2019 2 2019-06 06/10/2019 14:17 06/10/2019 3 2019-05 05/22/2019 14:31 05/22/2019 4 2019-04 04/08/2019 14:15 04/08/2019 5 2019-03 03/13/2019 14:19 03/13/2019 str(wq.date) 'data.frame': 5 obs. of 3 variables: $ YearMonth : chr "2019-07" "2019-06" "2019-05" "2019-04" ... $ SampleTime: chr "07/09/2019 14:44" "06/10/2019 14:17" "05/22/2019 14:31" "04/08/2019 14:15" ... $ SampleDate: chr "07/09/2019" "06/10/2019" "05/22/2019" "04/08/2019" ... 明确存在并且我相信自己引用正确,但一旦尝试使用mdy()来强制执行,似乎只会导致错误。 我研究了其他帖子herehere,但似乎都没有解决这个问题。

有什么想法吗?非常感谢!

1 个答案:

答案 0 :(得分:0)

我们需要将其包含在mutate内或提取列,否则,它将对整个data.frame应用该函数。根据{{​​1}}

  

将字符和数字向量中存储的日期转换为Date或POSIXct对象

因此,如果输入的不是?mdy,它将无法正常工作

vector