2011-12-07 32 views
5

Tôi nhận được nhật ký điện thoại rất dài dưới dạng tệp văn bản và tôi đã cố gắng đọc nó vào R nhưng nó không thực sự hoạt động. Văn bản có cấu trúc nhưng chắc chắn nó không phải là một bảng. Cấu trúc của nó như sauLàm thế nào để đọc một tệp văn bản vào R khi dữ liệu không có trong bảng

  1. Mỗi bản ghi bao gồm nhiều dòng để readlines không phải là khá thích hợp
  2. Mỗi dòng của mỗi bản ghi là một lĩnh vực riêng biệt
  3. Một số hồ sơ có một trường bổ sung sau khi trường thứ hai
  4. Mỗi bản ghi mới được ghi chú bằng một dòng trống. readLines hoặc scan sẽ làm việc nếu ai có thể xác định rằng hồ sơ đã được ngăn cách bởi "\ n \ n" và rằng các trường (hoặc cột) được phân cách bằng "\ n"

Dưới đây là một ví dụ:

TheInstitute 5467 
    telephone line 4125526987 x 4567 
    datetime 2011110516 12:56 
    blay blay blah who knows what, but anyway it may have a comma 

TheInstitute 5467 
    telephone line 4125526987 x 4567 
    datetime 2011110516 12:58 
    blay blay blah who knows what 

TheInstitute 5467 
    telephone line 412552999 x 4999 
    bump phone line 4125527777 
    datetime 2011110516 12:59 
    blay blay blah who knows what 

TheInstitute 5467 
    telephone line 4125526987 x 4567 
    bump phone line 4125527777 
    datetime 2011110516 13:51 
    blay blay blah who knows what, but anyway it may have a comma 

TheInstitute 5467 
    telephone line 4125526987 x 4567 
    datetime 2011110516 14:56 
    blay blay blah who knows what 

Tôi làm cách nào để thực hiện điều này trong R? Tôi đã thử các thủ thuật với quét, dán, strsplit nhưng tôi đang quay vòng tròn. Tôi có thể phải đưa nó vào danh sách vì nó có thể xử lý số phần tử không bằng nhau. Tôi muốn nhận được tất cả các hồ sơ để có cùng một số lĩnh vực và cho những hồ sơ mà không có một lĩnh vực (ở đây gọi là bump điện thoại) Tôi muốn họ chỉ có một NA là giá trị trong lĩnh vực đó. Tôi sẽ đánh giá cao sự giúp đỡ ngay cả chỉ để bắt đầu. Từ đó tôi có thể chơi và chơi đồ chơi.

Trả lời

14

Với multi.line = TRUE trong hàm scan, bản ghi phải kết thúc bằng hai dòng cuối. Tôi đã làm điều này với textConnection xung quanh tập tin của bạn, nhưng bạn sẽ sử dụng một tên tập tin hợp lệ:

inp <- scan(textConnection(txt), multi.line=TRUE, 
      what=list(place="character", tline1="character", 
      cline1="character", cline2 ="character", cline3="character"), sep="\n") 
Read 5 records 
> str(as.data.frame(inp)) 
'data.frame': 5 obs. of 5 variables: 
$ place : Factor w/ 1 level "TheInstitute 5467": 1 1 1 1 1 
$ tline1: Factor w/ 2 levels " telephone line 4125526987 x 4567",..: 1 1 2 1 1 
$ cline1: Factor w/ 4 levels " bump phone line 4125527777",..: 2 3 1 1 4 
$ cline2: Factor w/ 4 levels " blay blay blah who knows what",..: 2 1 3 4 1 
$ cline3: Factor w/ 3 levels ""," blay blay blah who knows what",..: 1 1 2 3 1 
> as.data.frame(inp) 
       place        tline1 
1 TheInstitute 5467 telephone line 4125526987 x 4567 
2 TheInstitute 5467 telephone line 4125526987 x 4567 
3 TheInstitute 5467 telephone line 412552999 x 4999 
4 TheInstitute 5467 telephone line 4125526987 x 4567 
5 TheInstitute 5467 telephone line 4125526987 x 4567 
         cline1 
1 datetime 2011110516 12:56 
2 datetime 2011110516 12:58 
3 bump phone line 4125527777 
4 bump phone line 4125527777 
5 datetime 2011110516 14:56 
                  cline2 
1 blay blay blah who knows what, but anyway it may have a comma 
2         blay blay blah who knows what 
3          datetime 2011110516 12:59 
4          datetime 2011110516 13:51 
5         blay blay blah who knows what 
                  cline3 
1                 
2                 
3         blay blay blah who knows what 
4 blay blay blah who knows what, but anyway it may have a comma 
5                 
+0

+1 Rất đẹp ... – Andrie

+0

... nhưng tôi đoán bạn cần phải tiếp tục phân chia 'place', 'tline' và 'cline1' vào các cột phụ? – Tommy

+0

Tôi nghĩ rằng nhiệm vụ tiếp theo sẽ là di chuyển xung quanh dữ liệu 'datetime' và 'bump lines', nhưng tôi không nghĩ rằng người hỏi đã yêu cầu phân tích các nhận xét. –

Các vấn đề liên quan