Почему lduridate mdy () возвращает ошибку в lapply ()? - PullRequest
1 голос
/ 03 октября 2019

Я пытаюсь понять, почему моя функция 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() для создания SampleDate только с 10-символьными датами, а затем пытался принудительно использовать 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(), хотя SampleDate явно существует, и я считаю, что я ссылался на него правильно. Я исследовал другие посты здесь и здесь , но ни один из них, похоже, не дошел до этой проблемы.

Мысли? Большое спасибо!

1 Ответ

0 голосов
/ 03 октября 2019

Нам нужно иметь его внутри mutate или извлечь столбец, иначе он применяет функцию ко всему data.frame. В соответствии с ?mdy

Преобразует даты, хранящиеся в символьных и числовых векторах, в объекты Date или POSIXct

Итак, если входное значение не является vector, оно выиграетне работает

library(dplyr)
library(lubridate)
library(stringr)
test.wq%>%
   mutate(SampleDate=str_sub(SampleTime,start=0,end=10))%>%
   mutate(date = mdy(SampleDate))
...