Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.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_Import_Read.table - Fatal编程技术网

读取R中带有制表符和分号的文本文件

读取R中带有制表符和分号的文本文件,r,import,read.table,R,Import,Read.table,我正在尝试导入包含以下信息的文本文件: Date (Tab) ON/OFF (Tab) 93489;123985;219389;1324;2349 Date (Tab) ON/OFF (Tab) 34536;34566;12346;235346;32567 Date (Tab) ON/OFF (Tab) 6346;235;6547457;2345;4576782 因此,我使用read.table()或read.csv()和参数sep=“;”或sep=“\t”。 它们可以工作,但不能同时工作。有

我正在尝试导入包含以下信息的文本文件:

Date (Tab) ON/OFF (Tab) 93489;123985;219389;1324;2349
Date (Tab) ON/OFF (Tab) 34536;34566;12346;235346;32567
Date (Tab) ON/OFF (Tab) 6346;235;6547457;2345;4576782
因此,我使用
read.table()
read.csv()
和参数
sep=“;”
sep=“\t”
。 它们可以工作,但不能同时工作。有没有更好的方法导入这些数据?读取同时使用制表符和分号的文件

最后,我需要提取的值,但目前这是不可能的,因为我得到了类似这样的值(包括“)

我可以替换“;使用“”,但它仍然是一个字符串,
strsplit()
将不起作用

"85626"
"81657 83249"
"84165 84560 84561 84957 85351 85746 85747 85748 86143"
"77701 78097 78893 86148 86149 86150"

为什么不先用分号替换制表符(或多空格),然后按正常方式导入:

tx<-"Date  ON/OFF  93489;123985;219389;1324;2349
Date  ON/OFF  34536;34566;12346;235346;32567
Date  ON/OFF  6346;235;6547457;2345;4576782"

read.table(text=gsub("([ /t]){2,9}",";",tx),header=F,sep=";")

    V1     V2    V3     V4      V5     V6      V7
1 Date ON/OFF 93489 123985  219389   1324    2349
2 Date ON/OFF 34536  34566   12346 235346   32567
3 Date ON/OFF  6346    235 6547457   2345 4576782

tx为什么不先用分号替换制表符(或多空格),然后正常导入:

tx<-"Date  ON/OFF  93489;123985;219389;1324;2349
Date  ON/OFF  34536;34566;12346;235346;32567
Date  ON/OFF  6346;235;6547457;2345;4576782"

read.table(text=gsub("([ /t]){2,9}",";",tx),header=F,sep=";")

    V1     V2    V3     V4      V5     V6      V7
1 Date ON/OFF 93489 123985  219389   1324    2349
2 Date ON/OFF 34536  34566   12346 235346   32567
3 Date ON/OFF  6346    235 6547457   2345 4576782

tx假设我们有测试数据:

Lines <- "Date\tON/OFF\t93489;123985;219389;1324;2349
Date\tON/OFF\t34536;34566;12346;235346;32567
Date\tON/OFF\t6346;235;6547457;2345;4576782
"
2)read.pattern在软件包的开发版本中,有一个新的函数
read.pattern
,可以简化此操作:

library(gsubfn)
source("http://gsubfn.googlecode.com/svn/trunk/R/read.pattern.R")

# read.pattern("myfile", pattern = "[^[:space:];]+")
read.pattern(text = Lines, pattern = "[^[:space:];]+")
给予:

    V1     V2    V1     V2      V3     V4      V5
1 Date ON/OFF 93489 123985  219389   1324    2349
2 Date ON/OFF 34536  34566   12346 235346   32567
3 Date ON/OFF  6346    235 6547457   2345 4576782
    V1 V2  V3    V4     V5      V6     V7      V8
1 Date ON OFF 93489 123985  219389   1324    2349
2 Date ON OFF 34536  34566   12346 235346   32567
3 Date ON OFF  6346    235 6547457   2345 4576782

在第二个解决方案中修订了pattern参数中的正则表达式,并在
source
语句中将
https
更改为
http

假设我们有测试数据:

Lines <- "Date\tON/OFF\t93489;123985;219389;1324;2349
Date\tON/OFF\t34536;34566;12346;235346;32567
Date\tON/OFF\t6346;235;6547457;2345;4576782
"
2)read.pattern在软件包的开发版本中,有一个新的函数
read.pattern
,可以简化此操作:

library(gsubfn)
source("http://gsubfn.googlecode.com/svn/trunk/R/read.pattern.R")

# read.pattern("myfile", pattern = "[^[:space:];]+")
read.pattern(text = Lines, pattern = "[^[:space:];]+")
给予:

    V1     V2    V1     V2      V3     V4      V5
1 Date ON/OFF 93489 123985  219389   1324    2349
2 Date ON/OFF 34536  34566   12346 235346   32567
3 Date ON/OFF  6346    235 6547457   2345 4576782
    V1 V2  V3    V4     V5      V6     V7      V8
1 Date ON OFF 93489 123985  219389   1324    2349
2 Date ON OFF 34536  34566   12346 235346   32567
3 Date ON OFF  6346    235 6547457   2345 4576782

在第二个解决方案中修改了模式参数中的正则表达式,并将
https
更改为
source
语句中的
http

使用
sep=“\t“
首先,在数据进入R后将其拆分。这里有几篇文章应该说明如何在将连接的列读入R后将其拆分。@Anando Mahto:最后,它使用
read.csv
\t
作为分隔符,然后使用
as.matrix(strsplit(as.character(newdata2),split=“;”)进行strsplit操作)
删除不必要的列后使用
sep=“\t”
首先,在数据进入R后将其拆分。这里有几篇文章应该说明如何在将连接的列读入R后将其拆分。@Anando Mahto:最后,它使用
read.csv
\t
作为分隔符,然后使用
as.matrix(strsplit(as.character(newdata2),split=“;”)进行strsplit操作)
删除不必要的列后,单击“备用解决方案”。你能解释一下{2,9}吗?为了满足多空间的需要,当我复制和粘贴它时,它将选项卡变成了2个空间,所以这匹配了2-9个空间。@user3319871那样有点复杂-你需要将-分离色谱柱并使其规则-参见上述NICE解决方案。你能解释一下{2,9}吗?为了满足多空间的需要,当我复制和粘贴它时,它将选项卡变成了2个空间,所以这匹配了2-9个空间。@user3319871那样有点复杂-你需要将-分开列,使其规则化-见上文谢谢,我认为我的错误并没有起作用,但我得到了它来做我想做的事……;)好的,谢谢。嗯,我是R的新手,更像是编程的初学者,所以。。。但是正如我上面提到的,我使用
as.matrix(strsplit(as.character(newdata2),split=“;”))
在删除了不必要的列之后,我对第二个解决方案做了一些更改,这应该允许它处理更大范围的输入。谢谢,根据我的错误,我认为它不起作用,但我得到了我想要的东西……;)好的,谢谢。嗯,我是R的新手,更像是编程的初学者,所以。。。但是正如我上面提到的,我使用
as.matrix(strsplit(as.character(newdata2),split=“;”))
在删除了不必要的列之后,我对第二个解决方案做了一些更改,这应该允许它处理更大范围的输入。