Как в R сохранить исходный формат дат при загрузке фрейма данных с последовательностью дат в качестве его заголовка? - PullRequest
0 голосов
/ 17 июня 2020

Фрейм данных, который я загрузил, DF, имеет последовательность дат в качестве заголовка. Однако "2020-02-01" превратилось в X2020.02.01 et c. Можно ли сохранить формат дат и называть столбцы по ним? А как получить список дат в исходном формате, т.е. ["2020-02-01", ... , "2020-04-21"]?

DF = read.csv("https://raw.githubusercontent.com/PawinData/UC/SFBA/Targets.csv")

1 Ответ

2 голосов
/ 17 июня 2020

R не любит имена столбцов, которые на самом деле являются данными. Кроме того, имена столбцов всегда преобразуются в character, поэтому они не будут настоящими объектами Date. В любом случае, если вы прочитаете ?read.csv, вы увидите аргумент check.names=.

check.names: logical. Если «ИСТИНА», то имена переменных во фрейме данных проверяются, чтобы убедиться, что они являются синтаксически допустимыми именами переменных. При необходимости они корректируются (с помощью make.names) так, чтобы они были такими, а также для того, чтобы не было дубликатов.

read.csv(text = "2020-02-02,2020-02-03\n1,2")
#   X2020.02.02 X2020.02.03
# 1           1           2
read.csv(text = "2020-02-02,2020-02-03\n1,2", check.names = FALSE)
#   2020-02-02 2020-02-03
# 1          1          2

DF = read.csv("https://raw.githubusercontent.com/PawinData/UC/SFBA/Targets.csv", check.names = FALSE)
DF[1:3,1:5]
#                2020-02-01 2020-02-02 2020-02-03 2020-02-04
# 1      Alameda          0          0          0          0
# 2 Contra Costa          0          0          0          0
# 3        Marin          0          0          0          0

Хотя имейте в виду, что вам нужно go шаг вперед в некоторых из ваших подмножеств.

DF$2020-04-21
# Error: unexpected numeric constant in "DF$2020"
# x
DF$"2020-04-21"
# [1] 28.719660 36.410103  3.961824 36.634331 17.015503 19.567608 12.449088
# [8]  2.419292 20.666366
DF$`2020-04-21`
# [1] 28.719660 36.410103  3.961824 36.634331 17.015503 19.567608 12.449088
# [8]  2.419292 20.666366

Имена:

colnames(DF) # or just names(DF)
#  [1] ""           "2020-02-01" "2020-02-02" "2020-02-03" "2020-02-04"
#  [6] "2020-02-05" "2020-02-06" "2020-02-07" "2020-02-08" "2020-02-09"
# [11] "2020-02-10" "2020-02-11" "2020-02-12" "2020-02-13" "2020-02-14"
# ...truncated...

Между прочим, ваш первый столбец имеет пустое имя, как видно выше и здесь:

head(DF[[1]])
# [1] "Alameda"       "Contra Costa"  "Marin"         "Napa"         
# [5] "San Francisco" "San Mateo"    

Вы можете справиться с этим двумя способами:

### original read method:
DF = read.csv("https://raw.githubusercontent.com/PawinData/UC/SFBA/Targets.csv", check.names = FALSE)
names(DF)[1]
# [1] ""
names(DF)[1] <- "counties"
DF[1:3, 1:5]
#       counties 2020-02-01 2020-02-02 2020-02-03 2020-02-04
# 1      Alameda          0          0          0          0
# 2 Contra Costa          0          0          0          0
# 3        Marin          0          0          0          0

или сделав им R-правильные «имена строк»:

DF = read.csv("https://raw.githubusercontent.com/PawinData/UC/SFBA/Targets.csv", 
              check.names = FALSE, row.names = 1)
DF[1:3, 1:5]
#              2020-02-01 2020-02-02 2020-02-03 2020-02-04 2020-02-05
# Alameda               0          0          0          0          0
# Contra Costa          0          0          0          0          0
# Marin                 0          0          0          0          0

По общему признанию, многие пакеты (а именно tidyverse) не используют и не сохраняют имена строк. Обычная рекомендация - преобразовать имена строк в правильный столбец, как показано в первом примере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...