Как прочитать дату с неправильно взятыми данными - PullRequest
0 голосов
/ 27 января 2020

Я использую данные по этой ссылке: http://lib.stat.cmu.edu/datasets/csb/ch14.dat, а интересующий столбец - 2-й и 15-й. Я работаю с Р. Это даты, и я пытаюсь найти промежуток времени между этими двумя. Однако они не вводятся как даты (например, 5-15-2019), они выглядят как строки символов для программы. Какую функцию в R я использую, чтобы проанализировать их и получить новый столбец, который сообщает мне количество времени между этими датами?

Ответы [ 2 ]

1 голос
/ 27 января 2020

Предполагая, что ваши два столбца даты имеют формат monthdayyear с двумя ди git годами, вы можете попробовать использовать as.Date с маской формата %m%d%%y:

dates <- c("072384", "072984")
dt <- as.Date(dates, format = "%m%d%y")
dt

[1] "1984-07-23" "1984-07-29"
0 голосов
/ 27 января 2020

Месяцы представляются в виде одинарного ди git месяца, нам нужно изменить его на двойное ди git, добавив ноль. Один из способов сделать это - использовать sprintf, после чего мы конвертируем данные в даты и вычитаем их.

df <- read.table("http://lib.stat.cmu.edu/datasets/csb/ch14.dat")
df$Diff_in_days <- as.Date(sprintf("%06d", df$V15), "%m%d%y") - 
                   as.Date(sprintf("%06d", df$V2), "%m%d%y")

head(df[15:20])
#     V15 V16 V17 V18 V19 Diff_in_days
#1  72984   D   N   .   Y       6 days
#2  82184   D   N   .   Y      33 days
#3  82585   D   N   .   Y     361 days
#4  10286   D   N   .   Y     488 days
#5 111485   D   N   .   Y     350 days
#6 112686   D   N   .   Y     721 days

Вы можете захотеть обернуть as.numeric, чтобы получить действительные числа в Diff_in_days.


Другой вариант - использовать функцию lubridate s mdy, которая обрабатывает это автоматически.

library(lubridate)
df$Diff_in_days <- mdy(df$V15) - mdy(df$V2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...