2016-06-22 7 views
0

ファイルを評価し、必要な行だけを解析しました。これらの行をデータフレームとして保存し、各フィールドの列に分割する方法を探しています。データフレームのための私のコードは以下の通りです:Rフレームでデータフレームを分割する方法

[1] F 20160525 08:22:06.838 F798256B GET 10.199.194.38:57708 wei2dt - "" "*li" 264 (0,0) "1.62 seconds (1.30 kilobits/sec)"      
[2] F 20160525 08:28:26.920 F798256C GET 10.19.105.15:57708 wei2dt - "isi_audit_log.dmp-sv.tmp" "*dl" 69 (0,0) "0.29 seconds (1.93 kilobits/sec)" 
[3] F 20160525 08:28:26.933 F798256E GET 10.19.105.15:57708 wei2dt - "CG0009-1364_GT_report.txt" "*dl" 34 (0,0) "0.01 seconds (34.0 kilobits/sec)" 
[4] F 20160525 08:28:26.941 F798256F GET 10.19.105.15:57708 wei2dt - "./" "*li" 89 (0,0) "0.01 seconds (102 kilobits/sec)"       
[5] F 20160525 08:29:12.717 7798256B SEND 10.19.105.15:57708 wei2dt - "isi_audit_log.dmp" "" 1019692009 (0,0) "38.05 seconds (214 megabits/sec)" 

1741レベル:F 20160525 08:22:06.838 F798256Bは10.199.194.38をGETする行が印刷されている場合、それはこのように表示され

con <- file("dataSet.txt", "r") 
lines <- c() 
while(TRUE) { 
    line = readLines(con, 1) 
    if(length(line) == 0) break 
    else if(grepl("^\\s*F{1}", line) && grepl("(0,0)", line, fixed = TRUE)) 
    lines <- c(lines, line) 
    } 
lines <- data.frame(lines) 

: (1キロビット/秒)

しかし、私は各フィールドがスペースで区切られたように複数の列に分割したいと思います。 )はそれ自身の列にあります。具体的には、私は、ラベル13個の列に分割します:

"Line ID" 
"Date" 
"Timestamp" 
"Transfer ID" 
"" 
"IP Address" 
"Username" 
"Encryption Level" 
"Transferred File" 
"" 
"Transferred Bytes" 
"Error" 
"Transfer Time Data" 

空白の文字列を含むものは、私が名前にしたくない列を示しています。私はそうのような上記の列に残りの部分を分割したい:

  1. F - ラインの識別子

  2. 20160525 - 日付(YYYYMMDD)

  3. 17:52:38.791 - - タイムスタンプ(HH:MM:SS.SSS)

  4. F798259D - 転送識別子

  5. 156.145.15.85:46634 - IP addre SSおよび関連ポート

  6. xqixh8sl - ユーザ名

  7. AES - 暗号化レベル(かもしれない - (ダッシュ))

  8. "/pcgc...fastq.gz" - 転送されたファイル"「

  9. (で)" -

  10. 2951144113追加の列( "" 空でなければならない) - 転送されたバイト

  11. (0,0) - エラー(今だけのために0,0とのラインを考える)

  12. "2289.47秒(10.3メガビット/秒)" - 転送

に関するデータ事前にあなたの助けをありがとう。要求されたよう

UPDATE

、私は下のdput(ヘッド(ライン、10))の結果を配置します。

"F 20160531 14:19:11.085 F7982871 GET 146.203.126.246:31947 xricf4xj AES \"/pcgc/public/Other/transcriptome/fastq/PCGC0069603_HS_TX__1-05846__v1_FC882_L2_p9of16_P2.fastq.gz\" \"\" 551700712 (0,0) \"12.42 seconds (355 megabits/sec)\"" 
"F 20160531 14:19:24.085 F7982872 GET 146.203.126.246:20198 xricf4xj AES \"/pcgc/public/Other/transcriptome/fastq/PCGC0069749_HS_TX__1-04056__v1_FC01060_L1_p3of12_P2.fastq.gz\" \"\" 592956993 (0,0) \"12.98 seconds (365 megabits/sec)\"" 
"F 20160531 14:20:04.881 F7982873 GET 146.203.126.246:37792 xricf4xj AES \"/pcgc/public/Other/transcriptome/fastq/PCGC0065337_HS_TX__1-02281__v1_FC504_L5_p4of6_P2.fastq.gz\" \"\" 1787507416 (0,0) \"40.76 seconds (351 megabits/sec)\"" 
"F 20160531 14:20:10.763 F7982874 GET 146.203.126.246:5683 xricf4xj AES \"/pcgc/public/Other/transcriptome/fastq/PCGC0065271_HS_TX__1-02626__v1_FC412_L1_p6of6_P2.fastq.gz\" \"\" 235573426 (0,0) \"5.86 seconds (321 megabits/sec)\"" 
"F 20160531 14:20:24.142 F7982875 GET 146.203.126.246:52946 xricf4xj AES \"/pcgc/public/CTD/transcriptome/fastq/PCGC0069557_HS_TX__1-00738__v1_FC864_L1_p3of7_P2.fastq.gz\" \"\" 619011108 (0,0) \"13.34 seconds (371 megabits/sec)\"" 
"F 20160531 14:20:36.823 F7982876 GET 146.203.126.246:12531 xricf4xj AES \"/pcgc/public/CTD/transcriptome/fastq/PCGC0065398_HS_TX__1-01907__v1_FC718_L1_p2of10_P1.fastq.gz\" \"\" 539231282 (0,0) \"12.63 seconds (341 megabits/sec)\"" 
"F 20160531 14:21:10.955 F7982877 GET 146.203.126.246:2531 xricf4xj AES \"/pcgc/public/LVOTO/transcriptome/fastq/PCGC0065300_HS_TX__1-00652__v1_FC437_L3_p1of6_P2.fastq.gz\" \"\" 1545568612 (0,0) \"34.10 seconds (363 megabits/sec)\"" 
"F 20160531 14:21:20.721 F7982878 GET 146.203.126.246:16699 xricf4xj AES \"/pcgc/public/Other/transcriptome/fastq/PCGC0065413_HS_TX__1-01894__v1_FC718_L1_p6of10_P1.fastq.gz\" \"\" 452830134 (0,0) \"9.73 seconds (372 megabits/sec)\"" 
"F 20160531 14:21:26.191 F7982879 GET 146.203.126.246:54154 xricf4xj AES \"/pcgc/public/Other/transcriptome/fastq/PCGC0065397_HS_TX__1-01894__v1_FC711_L2_p6of10_P2.fastq.gz\" \"\" 267729030 (0,0) \"5.45 seconds (393 megabits/sec)\"" 
"F 20160531 14:21:41.752 F798287A GET 146.203.126.246:55620 xricf4xj AES \"/pcgc/public/Other/transcriptome/fastq/PCGC0069744_HS_TX__1-05476__v1_FC971_L2_p1of12_P2.fastq.gz\" \"\" 670588883 (0,0) \"15.54 seconds (345 megabits/sec)\"" 
+0

'dput'を使用してdata.frameのサンプルを共有してください。 – lmo

+0

私はすでに上記のサンプルを提供しました。それは私が最初の5行を聞いたときに私の画面に現れる方法です。ファイルが大きい(40,000+)ので、私は全体を与えなかった。 – stargirl

+1

'dput'を使って、私が言ったようにサブサンプルを抽出して、reで読み込めるようにします。単純なdata.frameの場合、これは問題ではありませんが、ここではそうではありません。 'dput(head(df、10))'の結果をコピーしてあなたの質問に貼り付けてみてください。これらのヒントを[最小、完全で検証可能な例](http://stackoverflow.com/help/mcve)と[Rの素晴らしい例を作成する](http: //stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)。 – lmo

答えて

2

サーバーログのように見えます。あなたがreadr::read_logを試みることがあります。

library(readr) 
txt <- readLines(n=5) 
F 20160525 08:22:06.838 F798256B GET 10.199.194.38:57708 wei2dt - "" "*li" 264 (0,0) "1.62 seconds (1.30 kilobits/sec)"      
F 20160525 08:28:26.920 F798256C GET 10.19.105.15:57708 wei2dt - "isi_audit_log.dmp-sv.tmp" "*dl" 69 (0,0) "0.29 seconds (1.93 kilobits/sec)" 
F 20160525 08:28:26.933 F798256E GET 10.19.105.15:57708 wei2dt - "CG0009-1364_GT_report.txt" "*dl" 34 (0,0) "0.01 seconds (34.0 kilobits/sec)" 
F 20160525 08:28:26.941 F798256F GET 10.19.105.15:57708 wei2dt - "./" "*li" 89 (0,0) "0.01 seconds (102 kilobits/sec)"       
F 20160525 08:29:12.717 7798256B SEND 10.19.105.15:57708 wei2dt - "isi_audit_log.dmp" "" 1019692009 (0,0) "38.05 seconds (214 megabits/sec)" 
read_log(paste(txt, collapse="\n")) 
#  X1  X2   X3  X4 X5     X6  X7 X8      X9 
# 1 FALSE 20160525 08:22:06.838 F798256B GET 10.199.194.38:57708 wei2dt <NA>       
# 2 FALSE 20160525 08:28:26.920 F798256C GET 10.19.105.15:57708 wei2dt <NA> isi_audit_log.dmp-sv.tmp 
# 3 FALSE 20160525 08:28:26.933 F798256E GET 10.19.105.15:57708 wei2dt <NA> CG0009-1364_GT_report.txt 
# 4 FALSE 20160525 08:28:26.941 F798256F GET 10.19.105.15:57708 wei2dt <NA>      ./ 
# 5 FALSE 20160525 08:29:12.717 7798256B SEND 10.19.105.15:57708 wei2dt <NA>   isi_audit_log.dmp 
# X10  X11 X12        X13 X14 X15 X16 X17 X18 X19 X20 X21 X22 
# 1 *li  264 (0,0) 1.62 seconds (1.30 kilobits/sec)            
# 2 *dl   69 (0,0) 0.29 seconds (1.93 kilobits/sec)  <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> 
# 3 *dl   34 (0,0) 0.01 seconds (34.0 kilobits/sec) <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> 
# 4 *li   89 (0,0) 0.01 seconds (102 kilobits/sec)            
# 5  1019692009 (0,0) 38.05 seconds (214 megabits/sec) <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> 
# X23 X24 X25 X26 X27 X28 X29 X30 X31 X32 X33 X34 X35 X36 
# 1                  
# 2 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> 
# 3 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> 
# 4                  
# 5 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> 
+0

これはログファイルですが、すでにテキストファイルとして保存しています。 dataSet.txtファイルは私が読んでいるものです。 – stargirl

+0

次に 'read_log(" dataSet.txt ")'を実行します - '?read_log'を参照してください。 – lukeA

+0

私はそれを実行すると、行には同じ量の列がないと言うので、エラーが発生します。彼らには7人がいると予想されているが、彼らの人数は異なる。しかし、私は7つのコラムを望んでいない、私は13が必要です。この機能の仕組みを説明できますか? – stargirl

0

代わりdata.frame(lines)使用の

# call strsplit function, which splits the data by any white spaces  
my_df <- data.frame(do.call(rbind, strsplit(my_data, ' '))) 
my_cols <- c("Line ID","Date", "Timestamp","Transfer ID","", "IP Address", 
    "Username","Encryption Level", "Transferred File", "", "Transferred Bytes", 
    "Error", "Transfer Time Data") 

後で、あなたがさらに必要とされていないものを落としたり

...で1列に列を組み合わせることにより、データフレームをきれいにすることができます
# combine dataframe columns into a new column 
my_df$`Transfer Time Data` <- paste(my_df$X13,my_df$X14,my_df$X15) 

# remove columns 
within(my_df, rm(X13,X14,X15)) 

これはほとんど仕事ではありませんが、必要なものを手に入れてください。

関連する問題