पर लागू होने पर लागू चरित्र रूपांतरण से कैसे बचें डेटाफ्रेम पर apply
का उपयोग करते समय, तर्क (अंतर्निहित रूप से) चरित्र में परिवर्तित होते हैं। एक उदाहरण:डेटाफ्रेम
df <- data.frame(v=1:10, t=1:10)
df <- transform(df, t2 = as.POSIXlt(t, origin = "2013-08-13"))
class(df$t2[1])
## [1] "POSIXct" "POSIXt" (correct)
लेकिन:
apply(df, 1, function(y) class(y["t2"]))
## [1] "character" "character" "character" "character" "character" "character"
## [7] "character" "character" "character" "character"
वहाँ किसी भी तरह से इस रूपांतरण से बचने के लिए है? या क्या मुझे हमेशा as.POSIXlt(y["t2"])
के माध्यम से वापस परिवर्तित करना है?
संपादित
मेरे df 2 timestamps (जैसे कि, t2 और T3) और कुछ अन्य क्षेत्रों है (जैसे कि, v1, v2)। दिए गए टी 2 के साथ प्रत्येक पंक्ति के लिए, मैं टी (निकट 3) पंक्तियों को निकटतम टी 3 के साथ खोजना चाहता हूं, लेकिन टी 2 (और वही v1) से कम, और इन पंक्तियों (उदाहरण के लिए औसत) से v2 पर आंकड़े वापस कराना चाहता हूं। मैंने एक फ़ंक्शन एफ (टी 2, वी 1, डीएफ) लिखा और बस apply(df, 1, function(x) f(y["t2"], y["v1"], df)
का उपयोग करके सभी पंक्तियों पर इसे लागू करना चाहता था। आर में ऐसी चीजों को करने का कोई बेहतर तरीका है?
वास्तविक जवाब यह है कि आपको डेटा फ्रेम पर 'लागू' का उपयोग नहीं करना चाहिए। तुम क्या करने की कोशिश कर रहे हो? – joran
* रूपांतरण * हो रहा है क्योंकि आपका 'data.frame' को' matrix' पर ले जाया जा रहा है। –
आपके संपादन के अनुसार आपके पास वास्तव में दो अलग-अलग प्रश्न हैं (आईएमओ)। मैं कहूंगा कि एक उचित डेटा सेट, आपने जो कोशिश की है और वांछित आउटपुट के साथ दूसरे प्रश्न (आपका संपादन) पूछें। –