كيف يمكنني حذف الخطوط الفارغة في read.fwf؟

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

  •  25-08-2022
  •  | 
  •  

سؤال

raw<-"                        
+ x y z w a s d f g h     
+ 1 2 3 4 5               
+ 1 2 3 4 5 6 7 8 9 10    
+     1 2             "    
raw    
[1] "                    \nx y z w a s d f g h \n1 2 3 4 5           \n1 2 3 4 5 6 7 8 9 10\n    1 2             "    
read.fwf(textConnection(raw),widths=c(rep(2,10)))    
  V1 V2 V3 V4 V5 V6 V7 V8 V9 V10    
1                                   
2 x  y  z  w  a  s  d  f  g   h     
3 1  2  3  4  5                     
4 1  2  3  4  5  6  7  8  9   10    
5       1  2                        
read.fwf(textConnection(raw),widths=c(rep(2,10)),skip=1)    
   V1 V2 V3 V4 V5 V6 V7 V8 V9 V10    
1 x  y  z  w  a  s  d  f  g   h     
2 1  2  3  4  5                     
3 1  2  3  4  5  6  7  8  9   10    
4       1  2       

هل هناك طريقة أخرى للحصول على بيانات التنسيق الصحيحة باستخدام read.fwf أو read.table؟ هل يمكنني الحصول على نفس النتيجة بدون skip=1 في read.fwf أو مع read.table?

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

المحلول

اقرأ من أنبوب بدلاً من ملف ، ودع الأنابيب تتعامل مع التحولات التي تحتاجها والتي يمكن أن تكون بسيطة مثل grep -v '^$' لتخطي الخطوط الفارغة.

ال pipe() تم وصف الوظيفة في help(connections).

هنا مثال:

R> read.fwf("/tmp/raw.txt", width=rep(2,10), skip=1)
  V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 x  y  z  w  a  s  d  f  g   h 
2 1  2  3  4  5                 
3 1  2  3  4  5  6  7  8  9   10
4          1  2                 
R> read.fwf(pipe("grep -v '^$' /tmp/raw.txt"), width=c(rep(2,10)))
  V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 x  y  z  w  a  s  d  f  g   h 
2 1  2  3  4  5                 
3 1  2  3  4  5  6  7  8  9   10
4          1  2                 
R> 
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top