如何在R中拆分数据帧

如何在R中拆分数据帧,r,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)"

我已经计算了一个文件,并且只解析了我需要的行。我将这些行保存为数据框,现在正在寻找一种方法,将其拆分为每个字段的列。我的数据框代码如下:

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)
1741级:F 20160525 08:22:06.838 F798256B获取10.199.194.38:57708 wei2dt-“”“*li”264(0,0)“1.62秒(1.30千位/秒)”

但是,我希望将行拆分为多个列,以便每个字段(由空格分隔)都位于自己的列中。具体来说,我想将其分为13列,标记为:

"Line ID"
"Date"
"Timestamp"
"Transfer ID"
""
"IP Address"
"Username"
"Encryption Level"
"Transferred File"
""
"Transferred Bytes"
"Error"
"Transfer Time Data"
带有空白字符串的列表示我不想命名的列。我想将其余部分拆分为上面的列,如下所示:

  • F—行的标识符

  • 20160525——日期(yyyymmdd)

  • 17:52:38.791——时间戳(HH:MM:SS.sss)

  • F798259D—传输标识符

  • 156.145.15.85:46634——IP地址和相关端口

  • xqixh8sl—用户名

  • AES—加密级别(可以是-(破折号))

  • “/pcgc…fastq.gz”--传输的文件(在中)

  • “”--其他字符串(应为空“”)

  • 2951144113—传输的字节

  • <(0,0)-误差(仅考虑0,0行)

  • “2289.47秒(10.3兆位/秒)”--有关传输的数据

  • 提前谢谢你的帮助

    更新

    根据要求,我将把dput(head(line,10))的结果放在下面


    看起来像服务器日志;您可以尝试
    readr::read\u 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>
    
    库(readr)
    
    txt看起来像服务器日志;您可以尝试
    readr::read\u 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>
    
    库(readr)
    
    txt而不是
    data.frame(行)
    使用

    # 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")
    
    #调用strsplit函数,该函数通过任何空格分割数据
    
    my_df而不是
    数据。帧(行)
    使用

    # 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")
    
    #调用strsplit函数,该函数通过任何空格分割数据
    
    my_df请使用
    dput
    共享您的data.frame示例。我已经在上面提供了一个示例。这就是我请求前五行时在屏幕上显示的示例。文件很大(40000+)因此,我没有给出全部内容。如我所说,使用
    dput
    提取一个子样本,以便re可以读入。如果它是一个更简单的data.frame,这不会是一个问题,但这里不是这样。尝试复制和粘贴
    dput(head(df,10))的结果
    进入你的问题。看看这些关于如何生成a的提示,以及上的这篇文章。我希望这会让你开始。你在这里有更多类似的文章。请使用
    dput
    共享你的data.frame示例。我已经提供了上面的示例。这就是我要求前五行时屏幕上显示的方式。下面的文件很大(40000+),所以我没有给出全部内容。如我所说,使用
    dput
    提取一个子样本,以便re可以读取。如果它是一个更简单的data.frame,这不会是一个问题,但这里不是这样。尝试复制和粘贴
    dput(head(df,10))的结果
    进入你的问题。看看这些关于如何生成的提示,以及上的这篇文章。我希望这会让你开始。这里有更多类似的文章。这是一个日志文件,但我已经将其保存为文本文件。我正在阅读的是dataSet.txt文件。当我运行它时,会出现一个错误,因为它表明行没有sa告诉我列的数量。它说它们应该有七列,但数量不同。但是,我甚至不想要七列,我需要十三列。你能解释一下这个函数是如何工作的吗?你有错误还是只是警告?如果是后者:不在乎函数是否成功读取日志文件。阅读文档,看看这个函数是如何工作的离子工程(我也没有任何其他信息,除此之外。)这是一个日志文件,但我已经将其保存为文本文件。我正在读取的是dataSet.txt文件。当我运行它时,出现了一个错误,因为它说行的列数不相同。它说它们应该有七行,但它们的数量不同。但是,我甚至不想要七列,我需要十三列。你能解释一下如何操作吗此函数可以工作?您是否有错误或只是警告?如果是后者:不关心函数是否成功读取日志文件。请阅读文档以了解此函数的工作原理(除此之外,我没有任何其他信息)
    # 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))