2015-09-18 7 views
5

के प्रत्येक सदस्य को स्ट्रेटटाइम फ़ंक्शन लागू करें मुझे डेटा.table के प्रत्येक सदस्य को फ़ंक्शन लागू करने में समस्या हो रही है।डेटा.table

dt <- data.table(a= c("30JAN14:23:16:00","23MAY12:02:00:00"), 
        b=c("03AUG09:00:00:00","13JUN12:02:00:00"), 
        c=c("31JAN14:15:19:00","23MAY12:00:00:00")) 

strptime(dt[1,1,with=FALSE], "%d%B%y:%H:%M:%S") 

रिटर्न "2014-01-30 23:16:00 PST"

लेकिन जब मैं data.table भर में इसे लागू करने का प्रयास मैं मैं के लिए क्या देख रहा हूँ नहीं मिलता है और आरोप लगाने संदेश प्राप्त करते हैं: यहाँ एक सरल उदाहरण है।

cols <- c("a","b","c") 
dt[, (cols):=sapply(.SD, function(x) strptime(x, "%d%B%y:%H:%M:%S")),.SDcols=cols] 
+0

आपकी समस्याएं डेटाटेबल सिंटैक्स के साथ नहीं बल्कि आवेदन करने के लिए फ़ंक्शन की पसंद के साथ थीं। –

उत्तर

8

strptime रिटर्न वर्ग POSIXlt जो वास्तव में एक सूची यही वजह है कि यह या तो data.table या data.frame वस्तुओं के अंदर का उपयोग कर बताते है समस्याएं पैदा:

> dt[, (cols):=lapply(.SD, function(x) as.POSIXct(strptime(x, "%d%B%y:%H:%M:%S"))),.SDcols=cols] 
> dt 
        a     b     c 
1: 2014-01-30 23:16:00 2009-08-03 00:00:00 2014-01-31 15:19:00 
2: 2012-05-23 02:00:00 2012-06-13 02:00:00 2012-05-23 00:00:00 
+0

यह बेहतर उत्तर है, यह क्लास '" POSIXct "वर्ग के कॉलम देता है जबकि मेरा चरित्र कॉलम कॉल करता है – Jaap

4

तुम भी as.IDate और as.ITime बजाय strptime उपयोग कर सकते हैं। इसके अलावा, lapply बेहतर है:

dt[, (cols):=lapply(.SD, function(x) paste(as.IDate(x, "%d%B%y:%H:%M:%S"), 
              as.ITime(x, "%d%B%y:%H:%M:%S"), 
              sep=" ")), 
    .SDcols=cols] 

इस देता है:

> dt 
        a     b     c 
1: 2014-01-30 23:16:00 2009-08-03 00:00:00 2014-01-31 15:19:00 
2: 2012-05-23 02:00:00 2012-06-13 02:00:00 2012-05-23 00:00:00 
+0

इन कार्यों को मेरे ध्यान में लाने के लिए धन्यवाद – Kerry

+0

10k तक पहुंचने के लिए बधाई! – akrun

संबंधित मुद्दे