读取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=“;”))
在删除了不必要的列之后,我对第二个解决方案做了一些更改,这应该允许它处理更大范围的输入。