jxn
我有1文本文件,内容是杂乱的,其中有数据,有文字,需要R读取其中某行中的一个数据,例如
第10行:the best score = 3905
第25行:tree = (1,(2,3))
如何叫R取出 3905 和字符串(1,(2,3)) 呢?谢谢!
yihui
?substring
?as.numeric
还可能会用到?readLines或者?read.table等读取文件的函数。
jxn
还是无法读取
例如,txt的内容是
>Heuristic search completed
> Total number of rearrangements tried = 72
> Score of best tree(s) found = 3905.75544
> Number of trees retained = 20
> Time used = 7 sec (CPU time = 6.83 sec)
]
tree PAUP_1 = [&U] (c,(b,(r,(h,(o,(g,m))))));
用什么命令把这些读进来呢?我想把每一行读成一个记录,我试了read.table, scan, 都不行
如果每一行是个字符串,我要找包含字符串‘Score of best tree(s) found ’ 的行,又是用什么命令呢?R 好像没有一个包含的命令,
郁闷,请指教,谢谢了
bjt
没啥好办法,你说的太笼统
先用 regular expression 处理一下
然后再用 read.table 应该足够用
alexru
先用PERL处理一下你的数据,然后再读入
yihui
read.table需要设定分隔符sep,不然R会默认以空格或者Tab标记来作为分隔符,在你的例子中你可以用'\t'或者'\n'等字符作为sep;
scan需要设定读入数据的类型what,你读的是文本,那么就应该指定what='character';
我再用readLines给你举个例子,比如我先把你上面的几行文本复制到剪贴板中,然后
> readLines('clipboard')
[1] ">Heuristic search completed" "> Total number of rearrangements tried = 72"
[3] "> Score of best tree(s) found = 3905.75544" "> Number of trees retained = 20"
[5] "> Time used = 7 sec (CPU time = 6.83 sec)" "]"
[7] "tree PAUP_1 = [&U] (c,(b,(r,(h,(o,(g,m))))));"
所以读数据肯定是没有问题的。读入数据之后,要取第几行的文本我想不用多说,用下标就好了;至于取子字符串,前面我说了用substring,比如
> substring('the best score = 3905',18,22)
[1] "3905"
至于查找包含某字符串的字符串,实际就是一个模糊匹配的问题,用正则表达式regular expression即可。
> x=readLines('clipboard') #和前面一样
> grep('Score of*',x,extended=F)
[1] 3
grep返回匹配"Score of"的字符串位置。