هل هناك طريقة لاستخدام read.csv للقراءة من قيمة السلسلة بدلاً من ملف في r؟

StackOverflow https://stackoverflow.com/questions/3936285

  •  30-09-2019
  •  | 
  •  

سؤال

أنا أكتب حزمة R حيث يتحدث رمز R إلى تطبيق Java. يقوم تطبيق Java بإخراج سلسلة تنسيق CSV وأريد أن يكون رمز R قادرًا على قراءة السلسلة مباشرة وتحويلها إلى بيانات.

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

المحلول

تحرير إجابة عمرها 7 سنوات: الآن ، هذا هو كثير أبسط بفضل text= الحجة التي تمت إضافتها إلى read.csv() وعلى حد سواء:

R> data <- read.csv(text="flim,flam
+ 1.2,2.2
+ 77.1,3.14")
R> data
  flim flam
1  1.2 2.20
2 77.1 3.14
R> 

نعم ، انظر إلى المساعدة textConnection() -- ال قوي جدا الفكرة في R هي أن جميع القراء بشكل أساسي (مثل على سبيل المثال read.table() ومتغيراتها) الوصول إلى هذه الإتصال الكائن الذي قد يكون ملفًا ، أو عنوان URL عن بُعد ، أو أنبوب قادم من تطبيق آخر ، أو ... بعض النصوص كما في حالتك.

يتم استخدام نفس الخدعة لما يسمى بالوثائق هنا:

> lines <- "
+ flim,flam
+ 1.2,2.2
+ 77.1,3.14
+ "
> con <- textConnection(lines)
> data <- read.csv(con)
> close(con)
> data
  flim flam
1  1.2 2.20
2 77.1 3.14
> 

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

نصائح أخرى

لاحظ أنه في إصدارات التيار الآن من R ، لم تعد بحاجة إلى textConnection(), ، من الممكن ببساطة القيام بذلك:

> states.str='"State","Abbreviation"
+ "Alabama","AL"
+ "Alaska","AK"
+ "Arizona","AZ"
+ "Arkansas","AR"
+ "California","CA"'
> read.csv(text=states.str)
       State Abbreviation
1    Alabama           AL
2     Alaska           AK
3    Arizona           AZ
4   Arkansas           AR
5 California           CA

نعم. فمثلا:

string <- "this,will,be\na,data,frame"
x <- read.csv(con <- textConnection(string), header=FALSE)
close(con)
#> x
#    V1   V2    V3
#1 this will    be
#2    a data frame

لنفترض أن لديك ملفًا يسمى tommy.csv (نعم ، خيالي ، أعرف ...) يحتوي على محتويات

col1 col2 n 1 1 n 2 2 n 3 3

حيث يتم فصل كل سطر مع حرف الهروب " n".

يمكن قراءة هذا الملف بمساعدة allowEscapes حجة في read.table.

> read.table("tommy.csv", header = TRUE, allowEscapes = TRUE)

  col1 col2
1 col1 col2
2    1    1
3    2    2
4    3    3

إنها ليست مثالية (تعديل أسماء الأعمدة ...) ، لكنها بداية.

تلتف هذه الوظيفة إجابة ديرك في شكل مناسب. إنه لأمر رائع للإجابة على الأسئلة على ذلك ، حيث قام أحد الموظفين بإلقاء البيانات على الشاشة.

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

لاستخدامه ، قم أولاً بنسخ البيانات التي تظهر على الشاشة والصقها في محرر النصوص.

Foo Bar Baz
1 2 أ
3 4 ب

لفها الآن مع text_to_table, ونقلت وأي حجج أخرى ل read.table.

text_to_table("foo bar baz
1 2 a
3 4 b", header = TRUE)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top