Фантомный формат даты при чтении 2018 дат из файлов .csv в R - PullRequest
1 голос
/ 08 октября 2019

У меня есть несколько CSV-файлов 1 для каждого года с 2001 по 2018 год, каждый со столбцом даты. Все они в формате M / D / Y в Excel. Когда я читаю файлы в R с помощью

read.csv(x, stringsAsFactors = FALSE)

, каждый файл правильно преобразуется в формат ymd для столбца даты, за исключением года 2018, который сохраняет его в том же формате m / d / y.

Это проблема, когда я пытаюсь перенести даты в Lubridate, потому что формат m / d / y несовместим.

Я не уверен, почему эта проблема возникает только в 2018 году.

Я попытался скопировать и вставить даты в числовой формат Excel и импортировать их в R с помощью read.csv. Я скопировал и вставил в текстовом формате. Я также открыл новый файл Excel и CSV и скопировал данные в эти файлы. Я также вручную напечатал даты 2018 года и импортировал их в R с помощью read.csv.

Это можно исправить с помощью:

y <- read.csv(g, stringsAsFactors = FALSE) %>%
  as.tibble()
y$date <- gsub("/", "-", y$date)
y$date <- parse_date_time(y$date, orders = c('mdy', 'ymd'))
y$date <- as_date(y$date)

Но я нахожу это смущающим и хотел бы знать, почему Excelделает это только для 2018 года, и если другие сталкивались с этим.

Это пример того, как выглядит мой файл 2001.csv после

y <- read.csv(x, stringsAsFactors = FALSE) %>%
  as.tibble()
y

# # A tibble: 24 x 4
#    date       species Site_Code number
#    <chr>      <chr>     <int>  <int>
#  1 2001-08-11 WN          23      0
#  2 2001-10-12 WN          23      0
#  3 2001-01-11 EEE         27      0

И это то, что 2018.csvПосле прочтения файл выглядит так же, как указано выше:

# A tibble: 84 x 4
 date       species Site_Code number
 <chr>      <chr>     <int>  <int>
1 4/16/2018  EEE         23      0
2 4/30/2018  EEE         23      1
3 5/7/2018   EEE         23      0

Сообщения об ошибках не генерируются

1 Ответ

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

Ваши столбцы по-прежнему char, а не date. Вы можете проверить это, используя str(y), и это то, что пытается сказать вам заголовок <chr> в tibble. Выполните следующие действия, чтобы явно преобразовать их в lubridate формат даты. Пример для вашего y тибля.

y <- read.csv(x, stringsAsFactors = FALSE) %>%
  as.tibble()
# str(y)
#Classes ‘tbl_df’, ‘tbl’ and 'data.frame':  3 obs. of  4 variables:
# $ date      : chr  "4/16/2018" "4/30/2018" "5/7/2018"
# $ species   : chr  "EEE" "EEE" "EEE"
# $ Stite_Code: num  23 23 23
# $ number    : num  0 1 0

# date col is still chr
# do the following
y$date <- mdy(y$date)
str(y)

# Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 3 obs. of  4 variables:
# $ date      : Date, format: "2018-04-16" "2018-04-30" ...
# $ species   : chr  "EEE" "EEE" "EEE"
# $ Stite_Code: num  23 23 23
# $ number    : num  0 1 0

# Now date is Date format

Данные

y <-structure(list(date = c("4/16/2018", "4/30/2018", "5/7/2018"), 
    species = c("EEE", "EEE", "EEE"), Stite_Code = c(23, 23, 
    23), number = c(0, 1, 0)), row.names = c(NA, -3L), class = c("tbl_df", 
"tbl", "data.frame"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...