我想阅读一个文本文件(制表符分隔)。 问题是每组措施都是“逐块”组织的。
例如,使用此输入(bodydata.txt):
Body fat
08/21/2013 1:46 PM 17.4
08/20/2013 11:20 AM 17.4
08/17/2013 10:49 AM 17.2
08/16/2013 1:33 PM 17.4
08/15/2013 12:07 PM 17.5
08/14/2013 11:18 AM 17.4
08/13/2013 12:17 PM 17.3
Body weight
08/21/2013 1:46 PM 157
08/20/2013 11:20 AM 156.4
08/17/2013 10:49 AM 155
08/16/2013 1:33 PM 157
08/15/2013 12:07 PM 157
08/14/2013 11:17 AM 157
08/13/2013 12:16 PM 157.4
08/11/2013 4:47 PM 158.2
我想导入它们并为每个度量分别设置数据框:
> weight
V1 V2 V3
1 08/21/2013 1:46 PM 17.4
2 08/20/2013 11:20 AM 17.4
3 08/17/2013 10:49 AM 17.2
4 08/16/2013 1:33 PM 17.4
5 08/15/2013 12:07 PM 17.5
6 08/14/2013 11:18 AM 17.4
7 08/13/2013 12:17 PM 17.3
在Unix环境中,使用sed
(如this)拆分文本文件并不困难,但该解决方案不可移植。如果我能以R本地方式找到解决方案,那就太好了。有什么建议吗?
P.S。我无法想出在线搜索的好关键词。我会很感激任何文章/线程或谷歌搜索。如果有一篇我不知道的重复文章,我很抱歉。
答案 0 :(得分:1)
您的文件没有标签,所以我将使用空格作为分隔符。我使用blenk行作为文件分隔符:
Lines <- readLines(textConnection("Body fat
08/21/2013 1:46 PM 17.4
08/20/2013 11:20 AM 17.4
08/17/2013 10:49 AM 17.2
08/16/2013 1:33 PM 17.4
08/15/2013 12:07 PM 17.5
08/14/2013 11:18 AM 17.4
08/13/2013 12:17 PM 17.3
Body weight
08/21/2013 1:46 PM 157
08/20/2013 11:20 AM 156.4
08/17/2013 10:49 AM 155
08/16/2013 1:33 PM 157
08/15/2013 12:07 PM 157
08/14/2013 11:17 AM 157
08/13/2013 12:16 PM 157.4
08/11/2013 4:47 PM 158.2")
)
sdat <- split(Lines, cumsum(nchar(Lines)==0))
lapply(sdat , function(lins) {
good<- lins[nchar(lins)>0]
assign(make.names(good[1]), #name
read.table(text=good[-1]) , envir=.GlobalEnv) })
您将看到该函数打印拆分表,但作为副作用,您的全局环境中将有两个名为Body.fat
和Body.weight
的对象。如果原始文件中确实有选项卡,您可能希望在read.table
调用中放置sep =“\ t”。