طرق لقراءة فقط تحديد الأعمدة من ملف إلى r؟ (وسيلة سعيدة بين "read.table" و "المسح الضوئي"؟) [مكررة
-
25-09-2019 - |
سؤال
هذا السؤال لديه بالفعل إجابة هنا:
- قراءة الأعمدة المحددة فقط 3 إجابات
لدي بعض ملفات البيانات المحددة الكبيرة جدًا و أريد معالجة أعمدة معينة فقط في ص دون أخذ الوقت والذاكرة لإنشاء ملف data.frame
للملف بأكمله.
الخيارات الوحيدة التي أعرفها read.table
وهو مضيعة للغاية عندما أريد فقط بضع أعمدة أو scan
الذي يبدو منخفضًا جدًا لما أريد.
هل هناك خيار أفضل ، إما مع R Pure R أو ربما استدعاء إلى بعض البرامج النصية الأخرى Shell للقيام باستخراج العمود ثم استخدام المسح أو القراءة. (الذي يؤدي إلى السؤال كيفية استدعاء البرنامج النصي shell والتقاط إخراجه في r؟).
المحلول
أحيانًا أفعل شيئًا كهذا عندما يكون لدي البيانات في ملف علامة تبويب:
df <- read.table(pipe("cut -f1,5,28 myFile.txt"))
هذا يتيح cut
قم باختيار البيانات ، والذي يمكن أن يفعله دون استخدام الكثير من الذاكرة على الإطلاق.
يرى اقرأ فقط عدد محدود من الأعمدة لإصدار R الخالص ، باستخدام "NULL"
في ال colClasses
حجة ل read.table
.
نصائح أخرى
احتمال واحد هو الاستخدام pipe()
بدلاً من اسم الملف ولديه awk
أو مرشحات مماثلة تستخرج فقط الأعمدة التي تريدها.
يرى help(connection)
لمزيد من على pipe
والأصدقاء.
تعديل: read.table()
يمكنك أيضًا القيام بذلك نيابة عنك إذا كنت صريحًا جدًا بشأن colclasses - وهي قيمة خالية لعمود معين تتخطى العمود alltogether. يرى help(read.table)
. لذلك هناك حل في قاعدة R بدون حزم أو أدوات إضافية.
أعتقد أن نهج ديرك مستقيم إلى الأمام وسرعة. البديل الذي استخدمته هو تحميل البيانات في sqlite التي يتم تحميلها بشكل أسرع بكثير من read.table () ثم سحب ما تريد فقط. الحزمة SQLDF () تجعل هذا كل شيء سهل للغاية. هذا رابط إلى إجابة سابقة للمكدس التي تعطي أمثلة رمز لـ SQLDF ().
ربما يكون هذا أكثر مما تحتاج ، ولكن إذا كنت تعمل كبير جدا مجموعات البيانات بعد ذلك قد تكون إلقاء نظرة على حزمة hadoopstreaming الذي يوفر روتينًا خريطة باستخدام هادوب.