簡體   English   中英

如何在R中拆分數據幀

[英]How to Split a Data Frame in R

我已經評估了一個文件,並且僅針對我需要的行進行了解析。 我將這些行保存為數據框,現在正在尋找一種將每個字段分為幾列的方法。 我的數據框代碼如下:

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] 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 GET 10.199.194.38:57708 wei2dt-“”“ * li” 264(0,0)“ 1.62秒(1.30 kb / s)”

但是,我想將行分成多列,以便每個字段(用空格分隔)都在其自己的列中。 具體來說,我想將其拆分為標記為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地址和相關端口

  6. xqixh8sl-用戶名

  7. AES-加密級別(可以是-(破折號))

  8. “ /pcgc...fastq.gz”-傳輸的文件(在“”中)

  9. “”-附加字符串(應為空“”)

  10. 2951144113-傳輸的字節

  11. (0,0)-錯誤(目前僅考慮0,0的行)

  12. “ 2289.47秒(10.3兆位/秒)”-有關傳輸的數據

提前謝謝你的幫助。

更新

根據要求,我將dput(head(lines,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)\""

看起來像服務器日志; 您可以嘗試使用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>

代替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))

這與工作無關,但是可以滿足您的需求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM