R 读取文件并使每个字符在单独的列中

R 读取文件并使每个字符在单独的列中,r,readr,R,Readr,我有一个巨大的文件(序列对齐的方形数据文件),我想把每个位置放在一个单独的列中,但例如,readr::read_delim不能使用空分隔符,而对于readr::read_fwf来说,似乎需要指定每个位置?我有35000多个职位 输入文件示例: EIGMEYRTVSGVAGPLVILDKVKGPKYQEI。。。。。 EIGMEYRTVSGVAGPLVILDKVKGPKYQEI。。。。。 EIGMEYRTVSGVAGPLVILDKVKGPKYQEI。。。。。 输出: col1 col2 col

我有一个巨大的文件(序列对齐的方形数据文件),我想把每个位置放在一个单独的列中,但例如,
readr::read_delim
不能使用空分隔符,而对于
readr::read_fwf
来说,似乎需要指定每个位置?我有35000多个职位

输入文件示例:


EIGMEYRTVSGVAGPLVILDKVKGPKYQEI。。。。。
EIGMEYRTVSGVAGPLVILDKVKGPKYQEI。。。。。
EIGMEYRTVSGVAGPLVILDKVKGPKYQEI。。。。。

输出:

col1 col2 col3 col4 col5 col6。。。。
是的。。。。。
是的。。。。。
是的。。。。。

readr::read\u fwf
有,您可以使用
col\u positions
参数指定字段宽度。这是一个测试文件,
test.txt

Hdvsmf
Dfhjds
Dfhjkd
Dfklds
Dkjffd
Dsfjkd
fkldsf
假设您知道有多少字段,您可以指定字段宽度的向量(1个字符宽,5次,因为此测试文件中有五个字段):

这可能比为每个字段指定星形和端点位置更容易。您还可以向
fwf_widths
提供列名的字符向量,如:

fwf_widths(rep(1, 5), paste0('col', 1:5))
如果不知道有多少字段,也可以将其作为一个列引入,然后使用来提取列(
sep
参数可以采用数字位置向量,而不仅仅是分隔符):


你说的每个职位是什么意思?给我们一个数据示例以及您希望它看起来像什么。可以使用
readLines()
,然后使用
strsplit(myDF$myCol,split=”“)
。请提供示例输入文本文件和预期输出。谢谢,我尝试添加了一个示例。但基本上我只想为输入文件中的每个垂直位置/字符创建一个新列。这不像你必须为
read.fwf
键入35000个,只需
widths=rep(13500)
。如果您需要计算字符数,请使用系统命令,例如,
system(“head-n1 yourfile | wc-m”)
如果您使用的是unix-like。啊,太好了!谢谢别担心D:D
fwf_widths(rep(1, 5), paste0('col', 1:5))
# a data frame with everything in one column named blah
df1 = read_csv('test.txt', col_names = 'blah')
field_count = length(df1$blah[1]) # assuming the fields are all same length!

# nb: parentheses for field_count - 1 are super important! you will spend forever debugging this if you miss it
df1 = df1 %>% separate(blah, into = paste0('col', 1:field_count), sep = 1:(field_count - 1))