Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R正确导入每行不相等的列数_R_Rows - Fatal编程技术网

R正确导入每行不相等的列数

R正确导入每行不相等的列数,r,rows,R,Rows,我有一个超过40000行的数据集,每个数据集的列数不相等。我遇到的问题是,每行末尾的每个值都属于同一列,但其结尾被划分为许多不同的列 所以我的问题是:有没有一种简单的方法可以让每一行的最终值放在同一列中 标题为: c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 BAC0004 | acr3 | tr | B5LX01 | B5LX01 | CAMJU acr3 GN=acr3 PE=4 SV=1多药耐药 BAC0017 | adeI | tr | Q

我有一个超过40000行的数据集,每个数据集的列数不相等。我遇到的问题是,每行末尾的每个值都属于同一列,但其结尾被划分为许多不同的列

所以我的问题是:有没有一种简单的方法可以让每一行的最终值放在同一列中

标题为: c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14

BAC0004 | acr3 | tr | B5LX01 | B5LX01 | CAMJU acr3 GN=acr3 PE=4 SV=1多药耐药
BAC0017 | adeI | tr | Q2FD95 | Q2FD95 | ACIBA adeI GN=adeI PE=4 SV=1预测蛋白 BAC001 | abeM | tr | Q5FAM9 | Q5FAM9 |阿西巴多药外排泵abeM GN=abeM PE=4 SV=2多药耐药蛋白

当前导入如下所示:

c1                                   c2        c3       c4     c5      c6        c7    c8  c9
BAC0004|acr3|tr|B5LX01|B5LX01_CAMJU  Acr3      GN=acr3  PE=4   SV=1    multidrug resistance
BAC0017|adeI|tr|Q2FD95|Q2FD95_ACIBA  AdeI      GN=adeI  PE=4   SV=1    predicted protein
BAC0001|abeM|tr|Q5FAM9|Q5FAM9_ACIBA  Multidrug efflux   pump   AbeM    GN=abeM   PE=4 SV=2 multidrug efflux pump
c1                                   c2        c3       c4     c5    c6      c7   c8   c9
BAC0004|acr3|tr|B5LX01|B5LX01_CAMJU  Acr3      GN=acr3  PE=4   SV=1  NA      NA   NA   multidrug resistance
BAC0017|adeI|tr|Q2FD95|Q2FD95_ACIBA  AdeI      GN=adeI  PE=4   SV=1  NA      NA   NA   predicted protein
BAC0001|abeM|tr|Q5FAM9|Q5FAM9_ACIBA  Multidrug efflux   pump   AbeM  GN=abeM PE=4 SV=2 multidrug efflux pump
c1                                                         c2   c3      c4   c5   c6
BAC0004|acr3|tr|B5LX01|B5LX01_CAMJU                        Acr3 GN=acr3 PE=4 SV=1 multidrug resistance
BAC0017|adeI|tr|Q2FD95|Q2FD95_ACIBA                        AdeI GN=adeI PE=4 SV=1 predicted protein
BAC0001|abeM|tr|Q5FAM9|Q5FAM9_ACIBA Multidrug efflux pump  AbeM GN=abeM PE=4 SV=2 multidrug efflux pump
如果我希望它看起来像这样:

c1                                   c2        c3       c4     c5      c6        c7    c8  c9
BAC0004|acr3|tr|B5LX01|B5LX01_CAMJU  Acr3      GN=acr3  PE=4   SV=1    multidrug resistance
BAC0017|adeI|tr|Q2FD95|Q2FD95_ACIBA  AdeI      GN=adeI  PE=4   SV=1    predicted protein
BAC0001|abeM|tr|Q5FAM9|Q5FAM9_ACIBA  Multidrug efflux   pump   AbeM    GN=abeM   PE=4 SV=2 multidrug efflux pump
c1                                   c2        c3       c4     c5    c6      c7   c8   c9
BAC0004|acr3|tr|B5LX01|B5LX01_CAMJU  Acr3      GN=acr3  PE=4   SV=1  NA      NA   NA   multidrug resistance
BAC0017|adeI|tr|Q2FD95|Q2FD95_ACIBA  AdeI      GN=adeI  PE=4   SV=1  NA      NA   NA   predicted protein
BAC0001|abeM|tr|Q5FAM9|Q5FAM9_ACIBA  Multidrug efflux   pump   AbeM  GN=abeM PE=4 SV=2 multidrug efflux pump
c1                                                         c2   c3      c4   c5   c6
BAC0004|acr3|tr|B5LX01|B5LX01_CAMJU                        Acr3 GN=acr3 PE=4 SV=1 multidrug resistance
BAC0017|adeI|tr|Q2FD95|Q2FD95_ACIBA                        AdeI GN=adeI PE=4 SV=1 predicted protein
BAC0001|abeM|tr|Q5FAM9|Q5FAM9_ACIBA Multidrug efflux pump  AbeM GN=abeM PE=4 SV=2 multidrug efflux pump
但最好是这样:

c1                                   c2        c3       c4     c5      c6        c7    c8  c9
BAC0004|acr3|tr|B5LX01|B5LX01_CAMJU  Acr3      GN=acr3  PE=4   SV=1    multidrug resistance
BAC0017|adeI|tr|Q2FD95|Q2FD95_ACIBA  AdeI      GN=adeI  PE=4   SV=1    predicted protein
BAC0001|abeM|tr|Q5FAM9|Q5FAM9_ACIBA  Multidrug efflux   pump   AbeM    GN=abeM   PE=4 SV=2 multidrug efflux pump
c1                                   c2        c3       c4     c5    c6      c7   c8   c9
BAC0004|acr3|tr|B5LX01|B5LX01_CAMJU  Acr3      GN=acr3  PE=4   SV=1  NA      NA   NA   multidrug resistance
BAC0017|adeI|tr|Q2FD95|Q2FD95_ACIBA  AdeI      GN=adeI  PE=4   SV=1  NA      NA   NA   predicted protein
BAC0001|abeM|tr|Q5FAM9|Q5FAM9_ACIBA  Multidrug efflux   pump   AbeM  GN=abeM PE=4 SV=2 multidrug efflux pump
c1                                                         c2   c3      c4   c5   c6
BAC0004|acr3|tr|B5LX01|B5LX01_CAMJU                        Acr3 GN=acr3 PE=4 SV=1 multidrug resistance
BAC0017|adeI|tr|Q2FD95|Q2FD95_ACIBA                        AdeI GN=adeI PE=4 SV=1 predicted protein
BAC0001|abeM|tr|Q5FAM9|Q5FAM9_ACIBA Multidrug efflux pump  AbeM GN=abeM PE=4 SV=2 multidrug efflux pump
这是第3行造成的所有问题-我希望它保持名称作为一个长字符串,不添加这3个额外的列,但我真正想要的是名称(c1)和描述(最后的值),如果没有其他方式,我愿意以这种方式处理它


但我只是在想,也许有一种方法可以告诉R如何分割字符串——也许这样,“GN=*”值之后的所有值都被放在3个单独的列中。我不知道什么是最好的。谢谢你的帮助。

这是一个相当混乱的文件格式。最好是用制表符或行中容易找到的内容分隔字段。作为一个普通人,我很难猜到断点在哪里,所以我并不惊讶
read.table

您可以使用正则表达式解析这些字符串。差不多

#lines <- readLines("filename.txt")
lines <- c("BAC0004|acr3|tr|B5LX01|B5LX01_CAMJU Acr3 GN=acr3 PE=4 SV=1 multidrug resistance",
"BAC0017|adeI|tr|Q2FD95|Q2FD95_ACIBA AdeI GN=adeI PE=4 SV=1 predicted protein","BAC0001|abeM|tr|Q5FAM9|Q5FAM9_ACIBA Multidrug efflux pump AbeM GN=abeM PE=4 SV=2 multidrug resistance protein")

m <-regexpr("(.*) (\\w+) (GN=\\S+) (PE=\\S+) (SV=\\S+) (.*)", lines, perl=T)

                                                         V1   V2      V3   V4   V5                           V6
1                       BAC0004|acr3|tr|B5LX01|B5LX01_CAMJU Acr3 GN=acr3 PE=4 SV=1         multidrug resistance
2                       BAC0017|adeI|tr|Q2FD95|Q2FD95_ACIBA AdeI GN=adeI PE=4 SV=1            predicted protein
3 BAC0001|abeM|tr|Q5FAM9|Q5FAM9_ACIBA Multidrug efflux pump AbeM GN=abeM PE=4 SV=2 multidrug resistance protein

这似乎与您期望的结果相匹配。

您可以发布一个小样本数据来说明您的问题以及您希望得到的结果吗?如果您在
read.table()
中指定
fill=TRUE
,会有所帮助吗?
fill=TRUE
用于用NAs左填充行。在这种情况下,我建议您导入除c6-c8之外的所有列(使用选项
colClasses
,在
?read.table
中解释),第二次读取这些列,然后合并数据。问题是每行的第一行有时有额外的文本,这会中断整个导入。因此,导入c6之前的所有列不会奏效。您可以尝试
扫描(“filename”,what=character(),sep=”“)
,然后尝试组装数据帧。另外,您是否尝试过
data.table
软件包中的
fread
?太棒了!这对三行有效,行中有更多的列,我没有包括,但使用的方法与它工作的方法相同。但是文件是40000的事实又如何呢。我可以使用readLines(文件),但是对于
readLines
行,应该返回一个字符数组,以便您可以直接使用结果,只需将其分配给变量
lines