从R中删除txt输出中的空白行

时间:2015-03-18 11:25:29

标签: r gsub

我正在尝试创建一个特殊格式的文件,用作另一个软件中的输入文件。在这里的人的帮助下,我能够创建一个几乎存在的文件。现在我只需要删除* .txt输出文件中的一些空行。我用gsub()尝试了几种不同的方法,但无法找到方法。下面的示例生成一个文件,显示我被困的位置。

matsplitter<-function(M, r, c) {
rg <- (row(M)-1)%/%r+1
cg <- (col(M)-1)%/%c+1
rci <- (rg-1)*max(cg) + cg
N <- prod(dim(M))/r/c
cv <- unlist(lapply(1:N, function(x) M[rci==x]))
dim(cv)<-c(r,c,N)
cv}

B <- matrix(c(1:1380),ncol=5)
capture.output(matsplitter(B,3,5), file='output.txt')
write.table(gsub('\\[.*\\]', '', 
readLines('output.txt')), 
file='output.txt', row.names=FALSE, quote=FALSE)

我需要进一步删除的是&#34;,1&#34;,&#34;,2&#34;字符串和数字矩阵。

    x
    , , 1


        1  277  553 829 1105
        2  278  554  830 1106
        3  279  555  831 1107

    , , 2


        4  280  556  832 1108
        5  281  557  833 1109
        6  282  558  834 1110

    , , 3


        7  283  559  835 1111
        8  284  560  836 1112
        9  285  561  837 1113

1 个答案:

答案 0 :(得分:1)

如果您愿意超越gsub,可能的解决方案。为了清楚起见,我已经冒昧地将答案分成几部分。(希望如此)。

#read in file created by "capture.out"
out = gsub('\\[.*\\]', '', readLines('output.txt'))

如果查看此对象out,您将看到块看起来分隔了五个空格,并且您要删除的两个空格中的第一个是空字符串""。我们通过以下方式摆脱多个空间:

out = gsub("\\s{5}","",out)

现在在标题之后但是在每个块的前面有两个空字符串,并且在每个块之后有一个空字符串。由于我们只想排除块前面的空格,我们使用函数rle来查找重复元素并排除它们。

#get indicator vector
exclvec = rep(rle(out)$lengths,rle(out)$lengths)

#remove values as indicated by exclvec
out = out[ifelse(out=="" & exclvec==2,F,T)]

当我解释你写的问题时,这个数据框提供了所需的结果。

write.table(out,file='output.txt', row.names=FALSE, quote=FALSE)