2010-07-16 14 views
16

आर में read.table और read.csv फ़ंक्शंस का उपयोग किसी फ़ाइल या यूआरएल को सीमांकित डेटा युक्त करने और आर डेटा फ्रेम बनाने के लिए किया जाता है। हालांकि, मेरे पास पहले से ही एक चरित्र वेक्टर है जिसमें सीएसवी सीमांकित डेटा (कॉमा और \ n कॉलम और रिकॉर्ड डिलीमीटर के रूप में उपयोग किया जाता है), इसलिए मुझे इसे किसी फ़ाइल या यूआरएल से पढ़ने की आवश्यकता नहीं है। मैं इस चरित्र वेक्टर को read.table, read.csv, या scan() में डिस्क पर फ़ाइल को लिखने और इसे वापस पढ़ने के बिना कैसे पास कर सकता हूं? मुझे एहसास है कि डिस्क पर इसे लिखना संभव है, लेकिन मैं ऐसे समाधान की तलाश में हूं जिसके लिए इस अनावश्यक राउंडट्रिप की आवश्यकता नहीं है और सीधे चरित्र वेक्टर से डेटा पढ़ सकते हैं।डेटा फ्रेम निकालने के लिए मैं एक चरित्र वेक्टर से सीएसवी डेटा कैसे पार्स कर सकता हूं?

उत्तर

24

आप पाठ वेक्टर को read.table() में पास करने के लिए textConnection() का उपयोग कर सकते हैं। एक उदाहरण:

x <- "first,second\nthird,fourth\n" 
x1 <- read.table(textConnection(x), sep = ",") 
# x1 
    V1  V2 
1 first second 
2 third fourth 

R mailing list में उत्तर मिला।

2017 संपादित करें

सात साल बाद मैं इसे इस तरह शायद करना चाहते हैं:

read.table(text = x, sep = ",") 
+0

इस दृष्टिकोण के बारे में एक चेतावनी: 'टेक्स्टकनेक्शन()' पंक्तियों की संख्या बढ़ने के साथ बहुत धीमी हो सकती है। 223k पंक्तियों पर, मुझे एक अस्थायी सीएसवी को लिखने के लिए तेज़ी से मिल रहा है, और इसे पढ़ें। :( –

3

neilfws के जवाब देने के लिए एक छोटी सी परिशिष्ट। यह रैपर फ़ंक्शन स्टैक ओवरफ्लो पर सवालों के जवाब देने में मदद के लिए बहुत अच्छा है जब प्रश्नकर्ता ने डेटा फ्रेम प्रदान करने के बजाय अपने प्रश्न में कच्चे डेटा को रखा है।

textToTable <- function(text, ...) 
{ 
    dfr <- read.table(tc <- textConnection(text), ...) 
    close(tc) 
    dfr 
} 

उपयोग के साथ, उदा।

textToTable("first,second\nthird,fourth\n", sep = ",")