سؤال

أنا جديد نسبيًا على R ، لكن هذه هي المرة الأولى التي اضطررت فيها إلى التعامل مع تحويلات التاريخ. قرأت في بياناتي من CSV (باستخدام read.table ()) ، لكنني قمت باختصار البيانات لتسليط الضوء على مشكلتي. عند قراءة R ، حقل التاريخ هو شخصية.

ببساطة ، يتم إكراه معظم تواريخاتي بشكل صحيح ، باستثناء بعض الحالات. نأمل أن يوضح لك المثال أدناه ما يجري.

# my attempt to coerce the date -- uses the stringr package
prods.all$Date2 <- as.Date(str_sub(prods.all$Date, 1, 
                str_locate(prods.all$Date, " ")[1]-1), 
                "%m/%d/%Y")

# grab two rows to highlight my issue
temp <- prods.all[c(1925:1926), c(1,8)]

> temp
                   Date      Date2
1925  10/9/2009 0:00:00 2009-10-09
1926 10/15/2009 0:00:00 0200-10-15

كما ترون ، عام بعض التواريخ غير دقيقة. يبدو أن النمط يحدث عندما يكون اليوم مزدوجًا.

لقد نظرت من خلال اثنين من الكتب وحاولت Google طريقة أفضل ، ولكن يبدو أن كل شيء يشير إلى أن بياناتي لا يتم تنسيقها بشكل صحيح على الإدخال.

بالنظر إلى مدى قوة R ، أعتقد أن هناك طريقة سهلة للغاية لإجبار العمود على أن يكون تواريخ صالحة وأنني أطل على حل واضح للغاية.

كل مساعده ممكن ان تعطيها ستكون مقدره.

هل كانت مفيدة؟

المحلول

قد تكون مبالغًا فيه ، هل هناك أي سبب تحتاج إلى حزمة StringR؟

 df <- data.frame(Date = c("10/9/2009 0:00:00", "10/15/2009 0:00:00"))
 as.Date(df$Date, "%m/%d/%Y %H:%M:%S")

[1] "2009-10-09" "2009-10-15"

بشكل عام وإذا كنت بحاجة إلى مكون الوقت أيضًا ، استخدم Strptime:

strptime(df$Date, "%m/%d/%Y %H:%M:%S")

أنا أخمن ما قد تنظر إليه بياناتك الفعلية من النتائج الجزئية التي تقدمها.

نصائح أخرى

أسهل طريقة هي استخدام Lubridate:

library(lubridate)
prods.all$Date2 <- mdy(prods.all$Date2)

تقوم هذه الوظيفة تلقائيًا بإرجاع كائنات الفصل POSIXct وسيعمل مع العوامل أو الشخصيات.

library(lubridate)إذا كان تنسيق التاريخ الخاص بك مثل هذا '04/24/2017 05: 35: 00'Then قم بتغييره كما هو موضح أدناهprods.all$Date2<-gsub("/","-",prods.all$Date2)ثم قم بتغيير تنسيق التاريخparse_date_time(prods.all$Date2, orders="mdy hms")

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top