চরিত্রের ভেক্টরগুলিকে POSIXct / POSIXlt এ রূপান্তর করার জন্য as.POSIXct / as.POSIXlt এবং strptime এর মধ্যে পার্থক্য


95

আমি এখানে বেশ কয়েকটি প্রশ্ন অনুসরণ করেছি যা চরিত্রের ভেক্টরগুলিকে কীভাবে ডেটটাইম ক্লাসে রূপান্তর করতে হয় সে সম্পর্কে জিজ্ঞাসা করে। আমি প্রায়শই 2 টি পদ্ধতি, স্ট্রপটাইম এবং as.POSIXct / as.POSIXlt পদ্ধতিগুলি দেখতে পাই। আমি দুটি ফাংশন দেখেছি তবে পার্থক্য কী তা অস্পষ্ট।

স্ট্রিমটাইম

function (x, format, tz = "") 
{
    y <- .Internal(strptime(as.character(x), format, tz))
    names(y$year) <- names(x)
    y
}
<bytecode: 0x045fcea8>
<environment: namespace:base>

as.POSIXct

function (x, tz = "", ...) 
UseMethod("as.POSIXct")
<bytecode: 0x069efeb8>
<environment: namespace:base>

as.POSIXlt

function (x, tz = "", ...) 
UseMethod("as.POSIXlt")
<bytecode: 0x03ac029c>
<environment: namespace:base>

পারফরম্যান্সের পার্থক্য রয়েছে কিনা তা দেখার জন্য একটি মাইক্রোব্যাঙ্কমার্ক করছেন:

library(microbenchmark)
Dates <- sample(c(dates = format(seq(ISOdate(2010,1,1), by='day', length=365), format='%d-%m-%Y')), 5000, replace = TRUE)
df <- microbenchmark(strptime(Dates, "%d-%m-%Y"), as.POSIXlt(Dates, format = "%d-%m-%Y"), times = 1000)

Unit: milliseconds
                                    expr      min       lq   median       uq      max
1 as.POSIXlt(Dates, format = "%d-%m-%Y") 32.38596 33.81324 34.78487 35.52183 61.80171
2            strptime(Dates, "%d-%m-%Y") 31.73224 33.22964 34.20407 34.88167 52.12422

স্ট্রিমটাইম কিছুটা দ্রুত বলে মনে হচ্ছে তাহলে কি দেয়? কেন 2 টি অনুরূপ ফাংশন হবে বা তাদের যে আমি মিস করেছি তার মধ্যে পার্থক্য রয়েছে?


4
যদি আপনি কল করতে as.POSIXctএবং as.POSIXltচরিত্রের ভেক্টরগুলিতে কোন কোডটি ডাকা হচ্ছে তা দেখতে চান , যথাক্রমে as.POSIXct.defaultএবং দেখুন as.POSIXlt.character
জোশুয়া আলরিখ 22'12

উত্তর:


155

ঠিক আছে, ফাংশনগুলি বিভিন্ন জিনিস করে।

প্রথমত, তারিখ / সময় দুটি অভ্যন্তরীণ বাস্তবায়ন করা হয়: POSIXctযা ইউএনআইএক্স-এর যুগের কয়েক সেকেন্ড পরে (+ কিছু অন্যান্য ডেটা) সংরক্ষণ করে এবং POSIXltযা দিন, মাস, বছর, ঘন্টা, মিনিট, দ্বিতীয়, ইত্যাদির একটি তালিকা সঞ্চয় করে

strptimeঅক্ষর ভেক্টরগুলিকে (বিভিন্ন ধরণের ফর্ম্যাট) রূপান্তর করতে একটি ফাংশন POSIXlt

as.POSIXltবিভিন্ন ধরণের ডেটা ধরণের রূপান্তর করে POSIXlt। এটি বুদ্ধিমান হওয়ার এবং বোধগম্য কাজ করার চেষ্টা করে - চরিত্রের ক্ষেত্রে এটি একটি মোড়কের কাজ করে strptime

as.POSIXctবিভিন্ন ধরণের ডেটা ধরণের রূপান্তর করে POSIXct। এটি বুদ্ধিমান হওয়ার এবং বোধগম্য কাজ করার চেষ্টা করে - চরিত্রের ক্ষেত্রে এটি strptimeপ্রথমে চলে, তারপরে রূপান্তরটি রূপান্তর POSIXltকরে POSIXct

এটি strptimeদ্রুত উপলব্ধি করে , কারণ strptimeঅন্যরা ইনপুট প্রকার থেকে কোন পদ্ধতিটি ব্যবহার করতে হবে তা নির্ধারণ করার চেষ্টা করার সময় কেবল অক্ষর ইনপুট পরিচালনা করে। এটি কিছুটা নিরাপদ হওয়া উচিত যে অপ্রত্যাশিত ডেটা হস্তান্তর করা বুদ্ধিমান জিনিসটি করার চেষ্টা না করে যা আপনি চান তা হতে পারে না error


দুর্দান্ত উত্তর মডেলিং বা ডেটা ভিজ্যুয়ালাইজেশনের উদ্দেশ্যে ডেটা সংকলনের জন্য সর্বোত্তম অনুশীলন কোন conক্যমত্য আছে?
Dre

23

দুটি POSIXt প্রকার, POSIXct এবং POSIXlt রয়েছে। "সিটি" ক্যালেন্ডারের সময়ের জন্য দাঁড়াতে পারে, এটি উত্সের পর থেকে সেকেন্ডের সংখ্যা সঞ্চয় করে। "এলটি" বা স্থানীয় সময় তারিখটিকে সময়ের বৈশিষ্ট্যগুলির তালিকা হিসাবে রাখে (যেমন "ঘন্টা" এবং "সোম")। এই উদাহরণগুলি ব্যবহার করে দেখুন:

date.hour=strptime("2011-03-27 01:30:00", "%Y-%m-%d %H:%M:%S")

date=c("26/10/2016")

time=c("19:51:30")

day<-paste(date,"T", time)

day.time1=as.POSIXct(day,format="%d/%m/%Y T %H:%M:%S",tz="Europe/Paris")

day.time1

day.time1$year

day.time2=as.POSIXlt(day,format="%d/%m/%Y T %H:%M:%S",tz="Europe/Paris")

day.time2

day.time2$year
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.