拆分字符串线并制作数据框
Split string lines and make a data frame
我通过 readLines
从文本文件中读取了一小部分数据。该文件包含 #
之类的字符,我认为这就是 read.table 无法读取它的原因。这是前五行 dput:
files<-c("\trfinal\t\t", "eq1\t\t\t", "0.ster6\t1.00\t(1.00,1.00)\t.",
"1.ster6\t0.65\t(0.47,0.88)\t0.006", "0.parkinson\t1.00\t(1.00,1.00)\t.",
"1.ster6#0.parkinson\t1.00\t(1.00,1.00)\t.")
\t
表示字符串之间的白色space。我想拆分这些文本行并将它们放入一个 4 列网格(数据框)中。
我试过 strsplit(files, "[\t]")
但它并没有真正奏效。有帮助吗?
如果 "\t"
仅表示制表符分隔符,请尝试 read.delim
:
read.delim(text = files)
# X rfinal X.1 X.2
# 1 eq1 NA
# 2 0.ster6 1.00 (1.00,1.00) .
# 3 1.ster6 0.65 (0.47,0.88) 0.006
# 4 0.parkinson 1.00 (1.00,1.00) .
# 5 1.ster6#0.parkinson 1.00 (1.00,1.00) .
也可以考虑stringi
包。在这里,我将 "\t"
视为固定模式:
library(stringi)
stri_split_fixed(files, "\t", simplify = TRUE)
# [,1] [,2] [,3] [,4]
# [1,] "" "rfinal" "" ""
# [2,] "eq1" "" "" ""
# [3,] "0.ster6" "1.00" "(1.00,1.00)" "."
# [4,] "1.ster6" "0.65" "(0.47,0.88)" "0.006"
# [5,] "0.parkinson" "1.00" "(1.00,1.00)" "."
# [6,] "1.ster6#0.parkinson" "1.00" "(1.00,1.00)" "."
但总的来说,不清楚什么应该被视为 header 等等,最好实施@musically_ut 关于使用 [=16] 的建议=] 并尝试从源头上解决问题。
您可以禁用 #
作为 read.table
中的 comment.char
的处理:
read.table(text=files, sep='\t', comment.char="")
# V1 V2 V3 V4
# 1 rfinal
# 2 eq1
# 3 0.ster6 1.00 (1.00,1.00) .
# 4 1.ster6 0.65 (0.47,0.88) 0.006
# 5 0.parkinson 1.00 (1.00,1.00) .
# 6 1.ster6#0.parkinson 1.00 (1.00,1.00) .
我通过 readLines
从文本文件中读取了一小部分数据。该文件包含 #
之类的字符,我认为这就是 read.table 无法读取它的原因。这是前五行 dput:
files<-c("\trfinal\t\t", "eq1\t\t\t", "0.ster6\t1.00\t(1.00,1.00)\t.",
"1.ster6\t0.65\t(0.47,0.88)\t0.006", "0.parkinson\t1.00\t(1.00,1.00)\t.",
"1.ster6#0.parkinson\t1.00\t(1.00,1.00)\t.")
\t
表示字符串之间的白色space。我想拆分这些文本行并将它们放入一个 4 列网格(数据框)中。
我试过 strsplit(files, "[\t]")
但它并没有真正奏效。有帮助吗?
如果 "\t"
仅表示制表符分隔符,请尝试 read.delim
:
read.delim(text = files)
# X rfinal X.1 X.2
# 1 eq1 NA
# 2 0.ster6 1.00 (1.00,1.00) .
# 3 1.ster6 0.65 (0.47,0.88) 0.006
# 4 0.parkinson 1.00 (1.00,1.00) .
# 5 1.ster6#0.parkinson 1.00 (1.00,1.00) .
也可以考虑stringi
包。在这里,我将 "\t"
视为固定模式:
library(stringi)
stri_split_fixed(files, "\t", simplify = TRUE)
# [,1] [,2] [,3] [,4]
# [1,] "" "rfinal" "" ""
# [2,] "eq1" "" "" ""
# [3,] "0.ster6" "1.00" "(1.00,1.00)" "."
# [4,] "1.ster6" "0.65" "(0.47,0.88)" "0.006"
# [5,] "0.parkinson" "1.00" "(1.00,1.00)" "."
# [6,] "1.ster6#0.parkinson" "1.00" "(1.00,1.00)" "."
但总的来说,不清楚什么应该被视为 header 等等,最好实施@musically_ut 关于使用 [=16] 的建议=] 并尝试从源头上解决问题。
您可以禁用 #
作为 read.table
中的 comment.char
的处理:
read.table(text=files, sep='\t', comment.char="")
# V1 V2 V3 V4
# 1 rfinal
# 2 eq1
# 3 0.ster6 1.00 (1.00,1.00) .
# 4 1.ster6 0.65 (0.47,0.88) 0.006
# 5 0.parkinson 1.00 (1.00,1.00) .
# 6 1.ster6#0.parkinson 1.00 (1.00,1.00) .