我正在尝试导入包含以下信息的文本文件:
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"
。
它们起作用,但不能同时起作用。有没有更好的方法来导入这些数据?读取同时使用制表符和分号的文件?
最后,我需要提取的值,但目前这是不可能的,因为我得到这样的东西(包括“)
"18315;18316;18317;18318;18319;18320;18708"
"20317;20318;20319;20320;20321;20322;20714"
我可以替换“;”与“”,但它仍然是一个字符串,并且 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
这里有一个两步版本来处理不规则的 ; 分隔项的数量:
df<-read.table(text=tx,header=F,stringsAsFactors=F) # read table with ;-sep chars as one col
x.list<-strsplit(df[,ncol(df)],";") # turn the last row into a list, split by ;
max.length<-max(sapply(x.list,length)) # work out the max length
cbind(df[,1:ncol(df)-1], # bind the first columns
t( # to the transposed matrix
sapply(x.list,function(x){length(x)<-max.length # of the list, with each element expanded
x}) # to max.length items (NAs for missing)
)
)
V1 V2 1 2 3 4 5 6
1 Date ON/OFF 93489 123985 219389 1324 2349 <NA>
2 Date ON/OFF 34536 34566 12346 235346 32567 <NA>
3 Date ON/OFF 6346 235 6547457 2345 4576782 43455
关于在 R 中读取带有制表符和分号的文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21834224/