我正在尝试创建一个特殊格式的文件,用作另一个软件中的输入文件。在这里的人的帮助下,我能够创建一个几乎存在的文件。现在我只需要删除* .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
答案 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)