如何在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"
带有空白字符串的列表示我不想命名的列。我想将其余部分拆分为上面的列,如下所示:
看起来像服务器日志;您可以尝试
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))